・Visual Studio 2010の内部バージョンは10.0、Visual Studio 2005の内部バージョンは8.0
・_WIN32_WINNTの定義
0x501 XP
0x600 Vista
・Windows7、VS2010 の場合 cl.exe はC:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin フォルダにある。
・コンソールかそうでないかの切り替えは[プロジェクト]のプロパティ>[構成プロパティ]>[リンカ]>[システム]>[サブシステム]で行う。
このオプションを「設定なし」にすると、リンカが自動的に環境を選択する。
・プロジェクトをビルドしないようにするには[ソリューション]の構成マネージャで設定する。
・アセンブリファイルを出力するには[プロジェクト]>[プロパティ]>[構成プロパティ]>[C/C++]>[出力ファイル]>[アセンブリの出力]で設定する
・プロパティを開くショートカットキーは Shift + F4
・[オプション]>[プロジェクトおよびソリューション]に「アクティブなアイテムをソリューション エクスプローラで選択された状態にする」チェックがある。
・[プロジェクト]>[プロパティ]>[構成プロパティ]>[ビルドイベント]>[ビルド後のイベント]>[コマンドライン]でビルド後にコマンドを実行できる。
もし、特定のフォルダ内のプログラムを実行したい場合は[オプション]>[プロジェクトおよびソリューション]>[VC++ ディレクトリ]の実行ファイル一覧にフォルダのパスを追加すればよい。
・EnvDTE は Environment Development Tools Extensibility(環境開発ツール機能拡張)の略。
・ソリューションにはプロジェクトを格納できるソリューションフォルダ(点線フォルダ)を追加できる。
・warning C4996 の警告は#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 を定義することで安全な関数に置き換えることができる。(Cでは不可)
・ツールメニューの[設定のインポートとエクスポート]から設定のインポート・エクスポート・リセットができる。エディタの設定がおかしくなったときなど利用できる。
・コンソールと簡単に切り替えるため以下のようにするといいかも・・・[プロジェクト]のプロパティ>[構成プロパティ]>[リンカ]>[システム]>[サブシステム]は「設定なし」にして・・・
#define _CONSOLE //この行をコメントアウトするとコンソールが表示されません。
#ifdef _CONSOLE
#pragma comment(linker,"/SUBSYSTEM:CONSOLE")
int main(int argc, char *argv[])
#else
#pragma comment(linker,"/SUBSYSTEM:WINDOWS")
#include "windows.h"
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR lpCmdLine,int nCmdShow)
#endif
・ディレクトリの変換値
ビルド時に最後が \ が付いていない場合、警告メッセージが表示されて、勝手に追加されるようだ。
・プロパティの出力ディレクトリ・ファイルのデフォルト設定(色々いじることがあるから一応書いておく、多分合ってるかと)
・スタティックライブラリプロジェクトの設定手順(スタティックライブラリはlibフォルダに出力、デバッグバージョンは"プロジェクト名_d.lib"形式)
ライブラリ側
1.プロジェクトを右クリック>[プロパティ]>[構成プロパティ]>[ライブラリアン]の[出力ファイル]を Debug は$(SolutionDir)\\lib\\$(ProjectName)_d.lib、
Release は$(SolutionDir)\\lib\\$(ProjectName).lib にする。
2.[構成プロパティ]>[C/C++]>[コード生成]の[ランタイムライブラリ]を Debugはマルチスレッド デバッグ DLL (/MDd)、
Releaseはマルチスレッド (/MT)にする。
3.[構成プロパティ]>[C/C++]>[出力ファイル]の[プログラムデータベースの名前]を Debugは$(SolutionDir)\\lib\\$(ProjectName)_d.pdb、
Releaseは$(SolutionDir)\\lib\\$(ProjectName).pdbにする。
ライブラリを使う側
1.プロジェクトを右クリック>[プロパティ]>[構成プロパティ]>[リンカー]>[入力]の[追加の依存ファイル]にそれぞれのライブラリファイルを加える。
Win32APIなどを使用したいなら「親またはプロジェクトの既定値から継承」はチェックしたまま
(#pragma comment(lib,"ライブラリパス")を使う方法もあるが、BebugとReleaseの _d 有無の切り替えが必要になる場合がある)
ws2_32.lib などもこちら側で必要になる。
2.プロジェクトを右クリック>[プロジェクトの依存関係]で使用ライブラリにチェックを入れる
3.[構成プロパティ]>[VC++ ディレクトリ]のライブラリ ディレクトリにlibファイルの相対フォルダ($(SolutionDir)\libなど)を加える
4.インクルードは[構成プロパティ]>[VC++ ディレクトリ]のインクルードディレクトリに相対フォルダ($(SolutionDir)\commonなど)を加えるか、
インクルードを相対指定(#include "..\common\net.h"など)する
トラブルシューティング
1.外部参照未解決(error LNK1119・1120)が出た場合、libファイルへの参照が必要。↑ライブラリを使う側1を参照。
使用側ソースファイルに#pragma comment(lib, "..\\lib\\library.lib")と書いてもOK
2.error LNK1104(ライブラリファイルが開けないエラー)が出た場合、ライブラリファイルのパス指定や出力場所などを確認。ソースファイルで円記号2つあるかなど
3.「error LNK2005: _exit は既に LIBCMTD.lib(crt0dat.obj) で定義されています。」とか出てきた。
[構成プロパティ]>[リンカー]>[入力]の[特定の既定ライブラリの無視]で LIBCMTD を追加。MSVCRTも?これでいいのかはよくわからないorz
・サブプロジェクトでlibファイルを作成し、メインプロジェクトでfatal error LNK1120 などのライブラリエラーが出た場合は
①メインプロジェクトの[プロパティ]>[構成プロパティ]>[リンカー]>[入力]>[追加の依存ファイル]に[サブプロジェクト名].libを追加する。
②サブプロジェクトのlibファイルの出力フォルダを確認し(フォルダを直接見て調べても良い)、メインプロジェクトの[プロパティ]>[構成プロパティ]>[リンカー]>[全般]>[追加のライブラリディレクトリ]にサブプロジェクトのlibファイルフォルダ(..\Debugなど)を追加する。
他にもメインプロジェクトを右クリック>[プロジェクトの依存関係]でメインプロジェクトでサブプロジェクトを依存先に指定することも忘れずに。
・プリプロセッサの定義一覧([構成プロパティ]>[C/C++]>[プリプロセッサ]のプリプロセッサの定義)
・ショートカットキー