VC++プロジェクトのプロパティについて説明します
プログラムをビルドするとき、参照するディレクトリおよびファイルの設定
ビルド時のバッチコマンド実行など
プログラムを作成するために覚えておくとべきことと
プログラム作成の効率を上げる方法を紹介します

よく使う設定は以下の通りです
DebugモードとReleaseモード
文字コードの設定
追加のインクルードディレクトリ
追加のライブラリディレクトリ
追加の依存ファイル
コード生成
ビルド時コマンドライン
プリプロセッサの定義
コンソールの隠蔽
出力するファイル名の変更

プロジェクトのプロパティを操作するにはメニュー欄から
「プロジェクト」→「プロパティ」を選びます

prop10.GIF

DebugモードとReleaseモード

実行ファイルを作りに当たり、DebugモードとReleaseモードがあります。
Debugモードは主にプログラムのデバック(バグ消し)を行うためのモードです
Releaseモードは完成したアプリケーションを配布するためのモードです
生成されるファイルもDebugモードだとデバック用の情報やコードが埋め込まれていたりするため
出力されるファイルのサイズも違いますし、デバック用の処理がされるため
Releaseモードで出力されたファイルに比べて遅くなります
DebugモードとReleaseモードを切り替えるには次の箇所で選択します
注意しないといけないのは
DebugモードとReleaseモード別々にプロパティの設定をする必要があります

prop9.GIF

文字コードの設定

文字コードの設定を行います
基本的に「Unicode」か「マルチバイト文字」の設定を行います
Windows APIの関数を使うときはUnicodeとマルチバイトとで使われる関数が違うため
Windows APIの文字列関係のコンパイルエラーとなった場合、この設定を変更することで回避できます
(個人的にはこの設定に依存しないようなプログラムを書いたほうが良いと思いますが・・・)

prop1.GIF

追加のインクルードディレクトリ

プロジェクトに使うインクルードファイルのディレクトリの設定を行います
これはたとえばa.hというヘッダーファイルが
別のincludeというディレクトリ(フォルダ)にあったとして
インクルードするときには

#include "include\\a.h"

としてやらなければならないのですが
このincludeフォルダに他にもヘッダーファイルがある場合
いちいちパスをたどって指定するのはめんどうです
そこでincludeディレクトリの場所を予めプロジェクトに覚えさせておけば

#include "a.h"

と書くことができます。

パスというのは「親\子」のように「\」で区切られ、階層状になっています
ただし、プログラムや設定などでは「\」ではなく「\\」を使います
というのは「\」はプログラム上や設定では特殊な文字として扱われるので
普通に\文字を表示するには\\と書く必要があるからです
また、「\\」でなく「/」で区切ってあっても同じ意味です
パスは2種類あり、相対パスと絶対パスがあります
絶対パスというのはドライブ直下から階層が全て書かれているものを指します

たとえば次のようなものです

pass.GIF

これはパソコンを使っている人毎にフォルダやファイルの置き場とか異なりますし
長いのでプログラムや設定などで使うのは好ましくありません
そこで相対パスの指定方法を説明します

「.」は現在のディレクトリの絶対パスを指します
「..」は現在のディレクトリの1つ上のディレクトリの絶対パスを指します

ここでは、プロジェクトでのパスの設定のとき「.」を先頭に付けることで
プロジェクト(.vcproj)のあるディレクトリまでのパスを指します
プロジェクトのディレクトリ下にincludeディレクトリがある場合、次のように指定します

prop2.GIF

追加のライブラリディレクトリ

こちらはプロジェクトに使うライブラリファイル(.lib)ファイルのディレクトリを指定します
指定の仕方は追加のインクルードディレクトリと同じです

prop5.GIF

追加の依存ファイル

プロジェクトに使うライブラリファイル(.lib)ファイルを指定します
直接ライブラリファイルを指定します
プログラム冒頭で

#pragma comment(lib,"ライブラリファイル名.lib")

と書くのと同じことです
(個人的には#pragmaのがおすすめ)

prop8.GIF

コード生成

アプリケーションの構成にかかわる重要な項目です
コード生成には次の4つがあります
・マルチスレッドデバック
・マルチスレッド
・マルチスレッドデバックDLL
・マルチスレッドDLL

prop6.GIF

基本的には
Debugモードではマルチスレッドデバック
Releaseモードではマルチスレッド
を使います
というのは
・マルチスレッドデバックDLL
・マルチスレッドDLL
で作成した実行ファイルは別のパソコンで起動するには
次のようにうまく起動できず

exeerror.jpg

別にインストールするものが増えてしまうのです
(たとえば、VC++2005で作成した場合はVC++2005 再頒布可能パッケージが必要となります)
この2つに関してはさらに詳しくはDLLの項目で説明します

実行ファイルを配布するときにはReleaseモードでマルチスレッド
に設定した実行ファイルを作成するのを忘れないでください

ビルド時コマンドライン

ビルドイベント時(ビルドするとき)
・ビルド前
・リンク前
・ビルド後
の3種類でバッチコマンドを指定できます
たとえば、ビルド後のファイルを指定の箇所にコピーするコマンドをここに書いておけば
ビルドするたびにコマンドが実行され
ファイルを指定の箇所にコピーしてくれます
より詳細な使い方はバッチファイル作成の項目で説明します

prop7.GIF

プリプロセッサの定義

プリプロセッサの定義を設定できます
これはプロジェクト全体で#defineされているのと同じ意味を持ちます
ちなみに_DEBUGという定義はDebugモード時にデフォルトで定義されています
なので_DEBUGを利用してデバック用のコードを切り分けたりによくつかわれます。

prop4.GIF

コンソールの隠蔽

コンソールアプリケーションで作成する場合(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)」に変更します
subsystem.jpg

次に「リンカー」→「コマンドライン」→追加のオプションに次の設定を追加します

/ENTRY:mainCRTStartup

commandline.jpg

やっていることは先程の1行と同じなのですがプロジェクトのプロパティ設定をすることで
サブシステムの設定が有効になるため隠すことができるようになります
(おそらく、VS2010だと#pragmaよりプロパティ設定のほうが優先されるため、コマンドラインの設定にある
/SUBSYSTEM:CONSOLEが働き、サブシステム設定が有効にならない)

出力するファイル名の変更

通常はプロジェクトのファイル名の実行ファイルやライブラリファイルが作成されてしまうのですが
出力ファイル名を変更して実行ファイルやライブラリファイル名を作成することができます
出力ファイル名は「構成プロパティ」→「全般」→「ターゲット名」で変更することができます

$(ProjectName)は現在のプロジェクト名に置き換わります

target.jpg

ライブラリファイルを作成するとき
DebugモードとReleaseモードで出力ファイル名を変えてやるといったことが必要になると思いますが
Debugモードでは$(ProjectName)_d、Releaseモードでは$(ProjectName)(デフォルトのまま)
に切り替えることで対応することができます

このように設定しておけば
例えば、templateというプロジェクト名のライブラリファイル(.lib)を作成する場合
Debugモードではtemplate_d.lib、Releaseモードではtemplate.libが出力されます

選択肢 投票
(^ω^)やったお 3  
何これwww意味不すぎwww 0  
。(`ω´#)。あぁん?最近、だらしねぇな 1  

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS