VC++プロジェクトのプロパティについて説明します プログラムをビルドするとき、参照するディレクトリおよびファイルの設定 ビルド時のバッチコマンド実行など プログラムを作成するために覚えておくとべきことと プログラム作成の効率を上げる方法を紹介します よく使う設定は以下の通りです ・[[DebugモードとReleaseモード>#DebugRelease]] ・[[文字コードの設定>#charset]] ・[[追加のインクルードディレクトリ>#addincludedir]] ・[[追加のライブラリディレクトリ>#addlibdir]] ・[[追加の依存ファイル>#dependlib]] ・[[コード生成>#codegeneration]] ・[[ビルド時コマンドライン>#buildcmdline]] ・[[プリプロセッサの定義>#preprocesser]] ・[[コンソールの隠蔽>#hideconsole]] ・[[出力するファイル名の変更>#targetname]] プロジェクトのプロパティを操作するにはメニュー欄から 「プロジェクト」→「プロパティ」を選びます &ref(prop10.GIF); * DebugモードとReleaseモード &aname(DebugRelease);[#dd74d242] 実行ファイルを作りに当たり、DebugモードとReleaseモードがあります。 Debugモードは主にプログラムのデバック(バグ消し)を行うためのモードです Releaseモードは完成したアプリケーションを配布するためのモードです 生成されるファイルもDebugモードだとデバック用の情報やコードが埋め込まれていたりするため 出力されるファイルのサイズも違いますし、デバック用の処理がされるため Releaseモードで出力されたファイルに比べて遅くなります DebugモードとReleaseモードを切り替えるには次の箇所で選択します 注意しないといけないのは SIZE(30){ COLOR(#ffaa00){DebugモードとReleaseモード別々にプロパティの設定をする必要があります}} &ref(prop9.GIF); * 文字コードの設定 &aname(charset);[#cf3a3488] 文字コードの設定を行います 基本的に「Unicode」か「マルチバイト文字」の設定を行います Windows APIの関数を使うときはUnicodeとマルチバイトとで使われる関数が違うため Windows APIの文字列関係のコンパイルエラーとなった場合、この設定を変更することで回避できます (個人的にはこの設定に依存しないようなプログラムを書いたほうが良いと思いますが・・・) &ref(prop1.GIF); * 追加のインクルードディレクトリ &aname(addincludedir);[#o18121a8] プロジェクトに使うインクルードファイルのディレクトリの設定を行います これはたとえばa.hというヘッダーファイルが 別のincludeというディレクトリ(フォルダ)にあったとして インクルードするときには #include "include\\a.h" としてやらなければならないのですが このincludeフォルダに他にもヘッダーファイルがある場合 いちいちパスをたどって指定するのはめんどうです そこでincludeディレクトリの場所を予めプロジェクトに覚えさせておけば #include "a.h" と書くことができます。 パスというのは「親\子」のように「\」で区切られ、階層状になっています ただし、プログラムや設定などでは「\」ではなく「\\」を使います というのは「\」はプログラム上や設定では特殊な文字として扱われるので 普通に\文字を表示するには\\と書く必要があるからです また、「\\」でなく「/」で区切ってあっても同じ意味です パスは2種類あり、相対パスと絶対パスがあります 絶対パスというのはドライブ直下から階層が全て書かれているものを指します たとえば次のようなものです &ref(pass.GIF); これはパソコンを使っている人毎にフォルダやファイルの置き場とか異なりますし 長いのでプログラムや設定などで使うのは好ましくありません そこで相対パスの指定方法を説明します 「.」は現在のディレクトリの絶対パスを指します 「..」は現在のディレクトリの1つ上のディレクトリの絶対パスを指します ここでは、プロジェクトでのパスの設定のとき「.」を先頭に付けることで プロジェクト(.vcproj)のあるディレクトリまでのパスを指します プロジェクトのディレクトリ下にincludeディレクトリがある場合、次のように指定します &ref(prop2.GIF); * 追加のライブラリディレクトリ &aname(addlibdir); [#p3a5e712] こちらはプロジェクトに使うライブラリファイル(.lib)ファイルのディレクトリを指定します 指定の仕方は追加のインクルードディレクトリと同じです &ref(prop5.GIF); * 追加の依存ファイル &aname(dependlib);[#l80da80a] プロジェクトに使うライブラリファイル(.lib)ファイルを指定します 直接ライブラリファイルを指定します プログラム冒頭で #pragma comment(lib,"ライブラリファイル名.lib") と書くのと同じことです (個人的には#pragmaのがおすすめ) &ref(prop8.GIF); * コード生成 &aname(codegeneration);[#s14c8a03] アプリケーションの構成にかかわる重要な項目です コード生成には次の4つがあります ・マルチスレッドデバック ・マルチスレッド ・マルチスレッドデバックDLL ・マルチスレッドDLL &ref(prop6.GIF); 基本的には Debugモードではマルチスレッドデバック Releaseモードではマルチスレッド を使います というのは ・マルチスレッドデバックDLL ・マルチスレッドDLL で作成した実行ファイルは別のパソコンで起動するには 次のようにうまく起動できず &ref(exeerror.jpg); 別にインストールするものが増えてしまうのです (たとえば、VC++2005で作成した場合はVC++2005 再頒布可能パッケージが必要となります) この2つに関してはさらに詳しくはDLLの項目で説明します SIZE(30){ COLOR(#ffaa00){実行ファイルを配布するときにはReleaseモードでマルチスレッド}} に設定した実行ファイルを作成するのを忘れないでください * ビルド時コマンドライン &aname(buildcmdline); [#u88e3fce] ビルドイベント時(ビルドするとき) ・ビルド前 ・リンク前 ・ビルド後 の3種類でバッチコマンドを指定できます たとえば、ビルド後のファイルを指定の箇所にコピーするコマンドをここに書いておけば ビルドするたびにコマンドが実行され ファイルを指定の箇所にコピーしてくれます より詳細な使い方はバッチファイル作成の項目で説明します &ref(prop7.GIF); * プリプロセッサの定義 &aname(preprocesser);[#l1f509af] プリプロセッサの定義を設定できます これはプロジェクト全体で#defineされているのと同じ意味を持ちます ちなみに_DEBUGという定義はDebugモード時にデフォルトで定義されています なので_DEBUGを利用してデバック用のコードを切り分けたりによくつかわれます。 &ref(prop4.GIF); * コンソールの隠蔽 &aname(hideconsole); [#k952d7a9] コンソールアプリケーションで作成する場合(main関数から始まる場合)は必ずコンソールが開いてしまいます。 ウィンドウを表示するアプリケーションの場合、コンソールが表示されてしまうのは逆に邪魔になる場合があります (そうゆう場合は、そもそも最初からウィンドウズアプリケーションでプロジェクトを作成すればいいわけですが、 コンソールでテスト用コードを書いていてそのままウィンドウズアプリケーションに移行しようとした場合にコンソールが邪魔になる) その場合はコンソールを隠蔽する必要があるわけです。 VS2008以前はプログラムの冒頭に #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") のように1行書いてあれば、隠蔽することができました 例: #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") int main(){ return 0; } しかし、この方法ではVS2010では隠蔽することができなくなりました ではどうすればいいかというとプロジェクトのプロパティを次のように設定します まず、「リンカー」→「システム」→「サブシステム」→「Windows(/SUBSYSTEM:WINDOWS)」に変更します &ref(subsystem.jpg); 次に「リンカー」→「コマンドライン」→追加のオプションに次の設定を追加します /ENTRY:mainCRTStartup &ref(commandline.jpg); やっていることは先程の1行と同じなのですがプロジェクトのプロパティ設定をすることで サブシステムの設定が有効になるため隠すことができるようになります (おそらく、VS2010だと#pragmaよりプロパティ設定のほうが優先されるため、コマンドラインの設定にある /SUBSYSTEM:CONSOLEが働き、サブシステム設定が有効にならない) * 出力するファイル名の変更 &aname(targetname); [#ked346fd] 通常はプロジェクトのファイル名の実行ファイルやライブラリファイルが作成されてしまうのですが 出力ファイル名を変更して実行ファイルやライブラリファイル名を作成することができます 出力ファイル名は「構成プロパティ」→「全般」→「ターゲット名」で変更することができます $(ProjectName)は現在のプロジェクト名に置き換わります &ref(target.jpg); ライブラリファイルを作成するとき DebugモードとReleaseモードで出力ファイル名を変えてやるといったことが必要になると思いますが Debugモードでは$(ProjectName)_d、Releaseモードでは$(ProjectName)(デフォルトのまま) に切り替えることで対応することができます このように設定しておけば 例えば、templateというプロジェクト名のライブラリファイル(.lib)を作成する場合 Debugモードではtemplate_d.lib、Releaseモードではtemplate.libが出力されます #vote((^ω^)やったお[7],何これwww意味不すぎwww[1],。(`ω´#)。あぁん?最近、だらしねぇな[1]) #vote((^ω^)やったお[8],何これwww意味不すぎwww[1],。(`ω´#)。あぁん?最近、だらしねぇな[1])