VC6(MFC)でのシンプルなMakefileについて

このQ&Aのポイント
  • VC6でのMFCコンソールアプリケーションのビルド方法を要約します。
  • VC6のコンソールアプリケーションを最小限のオプションでビルドする方法を紹介します。
  • VC6のコンソールアプリケーションのmakefileの作成と必要なオプションについて解説します。
回答を見る
  • ベストアンサー

VC6(MFC)でのシンプルなMakefileについて

 VC6のコンソールアプリケーションで、CStdioFileクラスを使った単純なサンプルソースを作りました。  コンソールアプリケーションなのでIDEのプロジェクトは大げさな気がしたので、makefileをエクスポートして不要と思われる箇所を試行錯誤しながら削除しました。  現在、下記のオプションまで簡素化したのですが、まだまだ削れそうです。 MFCのコンソールアプリケーションをビルドするには、最小限どのようなオプションが必要なのでしょうか。 #コンパイルオプション CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_AFXDLL" /Fp"$(INTDIR)\$(TARGET).pch" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c RSC_PROJ=/l 0x411 /d "NDEBUG" /d "_AFXDLL" #リンクオプション LINK32_FLAGS=/nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\$(TARGET).pdb" /machine:I386 /out:"$(OUTDIR)\$(TARGET).exe" 以上、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

デバッグモードでなければ /Fdは必要ないかも また プリコンパイルヘッダを使わないのであれば /Fpも削れるかも リンカについても pdb周りは削ってもいいのかもしれませんよ

o_jiji
質問者

お礼

貴重な回答ありがとうございます。 さっそくご指摘の通りにしたら、exeサイズが16KBになりました。 コンソールプログラムは、小さいほうが気持ちいいですね。

関連するQ&A

  • [VC++2008].dllが見つからない

    Visual Studio C++ 2008で自作DLLを使用したプログラムを作成しています。 ソースツリーが以下のようにあります。 main.cpp で #pragma comment(lib,"myutil_d.lib") #include "myutil.h" とすると、コンパイルは成功するのですが、prog1.exeを実行すると: 「myutil_d.dllが見つからなかったため、このアプリケーションを開始できませんでした。」 と出てきてプログラムが始まりません。 これを解決する方法をご教授いただけるでしょうか? (MYPROGROOT) |-include | |-myutil.h | |-lib | |-myutil_d.dll | |-myutil_d.exp | |-myutil_d.lib | |-prog1 | |-Debug | | |-prog1.exe | | |-prog1.ilk | | |-prog1.pdb | |-prog1 | | |-Debug | | | |-BuildLog.htm | | | | ... | | | | | | |-main.cpp | | |-prog1.vcproj | | | |-prog1.ncb | |-prog1.sln | |-prog1.suo | |-prog2 |-Debug | |-prog2.exe | |-prog2.ilk | |-prog2.pdb |-prog2 | |-Debug | | |-BuildLog.htm | | | ... | | | | |-main.cpp | |-prog2.vcproj | |-prog2.ncb |-prog2.sln |-prog2.suo 「>ツール>オプション>プロジェクトおよびソリューション」下 インクルード ファイル :$(MYPROGROOT)\bin ライブラリ ファイル :$(MYPROGROOT)\include もちろんmyutil_d.dllを(MYPROGROOT)\prog\Debug\ に配置するとプログラムは動くのですが、prog1, prog2, と多数のプログラムで myutil_d.dllを使用するため、バージョン管理のために統一のディレクトリで .dllファイルを管理したいと考えています。

  • VC++makefile

    VC++2010では、makefileプロジェクトが使えるようですが unix,cygwinなどの ./configure を実行するにはどうしたらいいのでしょうか。

  • フレーム

    <select onchange="location.href=this.options[this.selectedIndex].value"> <option value=""> <option value="http~">A <option value="http~">B <option value="http~">C </select> のスクロールでリンクしているページを、違うフレーム(Dとする)に表示させたいのですが、 <select onchange="location.href=this.options[this.selectedIndex].value"> <option value=""> <option value="http~"target="D">A <option value="http~"target="D">B <option value="http~"target="D">C </select> としても、現在のフレーム内にしか表示されません。 どうやればDに表示できますか?説明が下手ですいません。

  • Visual C++ 2005で作ったツールの実行方法

    大変初歩的な質問で本当に申し訳ないのですが、Visual C++ 2005で作ったらしきツールの実行方法がわかりません。ネットで検索しても、あまりに初歩的過ぎるのか、そのものずばりは見つけられませんでした。 (昔少しだけ使った、VC++ 6.0では、*.exeというわかりやすいものがあったように思うのですが…) ツールの名前をAAAとしますと、ディレクトリの中は、以下のようなものがあります。 Debug(ディレクトリ) ReadMe.txt AAA.cpp AAA.ncb AAA.sln AAA.vcproj (その他の名前の*.cppと*.h) UpgradeLog.XML そして、Debugの下は、以下のようなものがあります。 BuildLog.htm AAA.exe.embed.manifest AAA.pch (その他の名前の*.obj) vc80.idb vc80.pdb ためしにAAA.pchをダブルクリックしますと、メモ帳が開いてしまい、バイナリが見えるだけです。また、ReadMe.txtは、「コンソール アプリケーション : AAA プロジェクトの概要」から始まる自動作成されるドキュメントで、肝心の実行ファイルのことは書かれていませんでした。 非常にお恥ずかしい限りなのですが、質問できる人も今はおらず、お願い致します。

  • CのDLLをVC++でコンパイルしたいのですが、エラーになってしまいます。

    c言語の初心者なのですが、質問させて下さい。 javaからCのDLLを呼び出したく、 (下記のソースを書いたのですが、VC++でコンパイルすると LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/HelloWorld.exe : fatal error LNK1120: 外部参照 1 が未解決です。 と出てしまいます。 過去ログ等を見て、作成しているプロジェクトが悪いのかなと思い、 MFC appWizark(dll) win32 Application win32 Console Application win32 Dynamic-Link Library 等を作ってみてコンパイルしてみたのですが、駄目でした。 ちなみにDOSプロンプトで cl -IC:\j2sdk1.4.2_10\include\win32 -LD HelloWorl d.c -o HelloWorld.dll と実行するときちんとコンパイルできて、正常に実行も出来ました。 VC++でどうやればコンパイルできるのでしょうか? #include "HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_printMessage (JNIEnv *env, jobject me) { printf("Helo World!!!\n"); return; }

  • ソースアプリケーションから応答がありません。

    アクセス2010です。 ほぼ毎回なのですが、 ファイルを開くと 「ソースアプリケーションから応答がありません。 応答を待ちますか?」 「DDE チャネルが確立されていますが Accessのオプションダイアログボックスで指定されている OLE/DDE タイムアウトの範囲内で データ交換が完了しませんでした。」 というメッセージが表示されます。 https://support.office.com/ja-jp/article/DDEInitiate-%E9%96%A2%E6%95%B0-884dd8b0-6da6-4117-8fd3-5339d6580d7e にて DDEを調べてみたのですが、 どうやらこのページはエクセルでした。 しかし 「別のアプリケーションとの動的データ交換 (DDE) 変換を開始します。」 と書いてあるのですが、 DDEとはデータ交換という意味ならば 私のアクセスファイルも 他のアプリケーションと変化作業をしようとしているのでしょうか? 他のアクセスファイルから テーブルリンクをしていますが これが原因なのでしょうか? しかし他のアクセスファイルでも テーブルリンクをしたものはありますが いつもこのファイルだけ上記のメッセージが表示されます。

  • VC++ MFC

    MFCの初心者です。 MFC環境は2003.NETです。 現在はメインダイアログからサブダイアログを呼び出すコードを編集しています。メインダイアログから2回以降サブダイアログを呼び出す際にその前のダイアログのチェックボックスやリストボックスの情報を記憶させておきたいのですが、なにかいい方法があれば是非ご教授お願いいたします。

  • VisualC++の新規作成について。

    ちょっと古いですが、Windows98で「Visual C++ 6.0」を使用しています。C言語の解説本を見てを勉強しようとしている初心者です。 新規作成するときに[ファイル][新規作成][プロジェクト][Win32 Console Application]と選択して進み、プロジェクト名を入力して、[OK]を押すと [作成するコンソールアプリケーションの種類を選択してください] と表示され、 [空のプロジェクト] [単純アプリケーション] ["Hello,World!"アプリケーション] [MFCをサポートするアプリケーション] の四つの中から選ぶようになります。 作成する、プログラムは初心者向けの解説本に載っているようなまだ短めのプログラムなのですが、どれを選択すればよろしいのでしょうか? ためしに # include <stdio.h> int main(void) { printf("%d", 15 + 37); return(0); } とのプログラムを入力してコンパイルしてみましたが、 コンパイル中... prg.cpp c:\prg\prg.cpp(4) : fatal error C1083: プリコンパイル済ヘッダー ファイルがオープンできません。'Debug/prg.pch': No such file or directory cl.exe の実行エラー prg.obj - エラー 1、警告 0 と表示されてしまいます。 このまま、ビルドしようとしても 「ソース ファイル"C:\prg\prg.c"と"C:\prg\prg.cpp"はともに出力ファイル"C:\prg\Debug\prg.obj"を作成するために設定されています。プロジェクトをビルドできません」 と表示されるのです。 プログラムのプロジェクト名は「prg」で、ファイル名は「prg.c」です。 どなたか解決策をよろしくお願いいたいます。

  • Makefileについて質問です。あるMakefileをのぞいてみたら

    Makefileについて質問です。あるMakefileをのぞいてみたら↓のように(一部ですが)書いてあったのですが、 どういう事をしているのかよく分かりません。 もしよろしければこの部分がどのような事をしているのか教えて頂けますでしょうか? all:; @if [ x$(ARCH) = x ]; then \ echo "Missing environmnet value ARCH"; \ exit; \ else \ for dir in $(SUBDIRS) ; do \ echo working at $$dir; \ (set +x; cd $$dir; $(MAKE) $(MFLAGS) $@ ); \ done; \ fi \は¥で置き換えてください

  • makefileの書き方

    UNIX環境でC言語で作成したプログラムのコンパイルをmakefileを使用して行いたいのですが、 インクルードディレクトリの指定が無視されてしまいます。(CFLAG2の-o $@も) 何が問題なのでしょうか? ファイルの構成としてはとりあえず全て同じディレクトリに格納しています。 (3)だけであればインクルードディレクトリの指定等は問題なく展開され、 オブジェクトができあがります。 (1)(2)でロードモジュールを作成しようとすると質問の問題が発生します。 # CC = cc CFLAGS = -Aa -O -g -Y -D_HPUX_SOURCE CFLAGS2 = -o $@ -c # INCDIR = . SRCDIR = . OBJDIR = . INCLUDE = -I$(INCDIR) OBJS = TestMain.o MODULE = $(OBJDIR)/TestMain all: $(MODULE)  ・・・・・(1) $(MODULE): $(OBJS)  ・・・・・(2) $(CC) -o $@ $^ $(OBJDIR)/TestMain.o: $(SRCDIR)/TestMain.c $(SRCDIR)/TestCommon.c  ・・・・・(3) $(CC) $(INCLUDE)/ $(CFLAGS) $(CFLAGS2) $(SRCDIR)/TestMain.c $(SRCDIR)/TestCommon.c (タブは消えてしまいました)