opengl:visual_studio
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| opengl:visual_studio [2015/07/05 22:05] – [MSBuild] oga | opengl:visual_studio [2021/12/18 17:58] (現在) – [動作の確認方法] oga | ||
|---|---|---|---|
| 行 89: | 行 89: | ||
| Makefile で同様の定義をしてみましょう。 | Makefile で同様の定義をしてみましょう。 | ||
| - | < | + | < |
| # Makefile | # Makefile | ||
| COPY_FILE=$(COPY_SRC)/ | COPY_FILE=$(COPY_SRC)/ | ||
| 行 102: | 行 102: | ||
| 下記の例では COPY_FILE に " | 下記の例では COPY_FILE に " | ||
| - | < | + | < |
| # Makefile | # Makefile | ||
| COPY_SRC=C:/ | COPY_SRC=C:/ | ||
| 行 186: | 行 186: | ||
| 下記の .PHONY 宣言がそれに相当します。 | 下記の .PHONY 宣言がそれに相当します。 | ||
| - | < | + | < |
| # Makefile | # Makefile | ||
| .PHONY: all | .PHONY: all | ||
| 行 209: | 行 209: | ||
| Build 手順の各行は Tab で始まっている必要があります。 | Build 手順の各行は Tab で始まっている必要があります。 | ||
| - | < | + | < |
| # Makefile | # Makefile | ||
| .PHONY: copy | .PHONY: copy | ||
| 行 251: | 行 251: | ||
| .PHONY 宣言された Target は、常にファイルが存在していないものとみなします。 | .PHONY 宣言された Target は、常にファイルが存在していないものとみなします。 | ||
| - | < | + | < |
| # Makefile | # Makefile | ||
| 行 263: | 行 263: | ||
| - | < | + | < |
| # Makefile | # Makefile | ||
| .PHONY: all | .PHONY: all | ||
| 行 338: | 行 338: | ||
| Makefile はパターンマッチングで複数の Target の列挙ができます。 | Makefile はパターンマッチングで複数の Target の列挙ができます。 | ||
| - | < | + | < |
| # Makefile (gmake 系) | # Makefile (gmake 系) | ||
| FILE_LIST=A.bak B.bak C.bak | FILE_LIST=A.bak B.bak C.bak | ||
| 行 350: | 行 350: | ||
| nmake は若干書式が違います。 | nmake は若干書式が違います。 | ||
| - | < | + | < |
| # Makefile (nmake) | # Makefile (nmake) | ||
| FILE_LIST=A.bak B.bak C.bak | FILE_LIST=A.bak B.bak C.bak | ||
| 行 433: | 行 433: | ||
| Makefile では foreach に相当します。 | Makefile では foreach に相当します。 | ||
| - | < | + | < |
| $(foreach file, | $(foreach file, | ||
| </ | </ | ||
| 行 439: | 行 439: | ||
| ===== 条件付き実行 ===== | ===== 条件付き実行 ===== | ||
| + | |||
| + | MSBuild ではすべてのタグに条件式を指定することができます。 | ||
| + | 条件式は Condition アトリビュートで指定します。 | ||
| + | 下記の例は、Build 時の Configuration が Debug か Release かによって Property $(LinkFilePath) の定義内容を変えています。 | ||
| + | |||
| + | <code xml> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Condition アトリビュートはあらゆる場所に指定することができます。 | ||
| + | 複数の Property をまとめて条件分岐させたいなら、PropertyGroup に Condition を設けることもできるわけです。 | ||
| + | |||
| + | Makefile であれば ifeq ~ else ~ endif が相当します。 | ||
| + | |||
| + | <code make> | ||
| + | # Makefile | ||
| + | ifeq ($(CONFIGURATION), | ||
| + | LINK_FILE_PATH=lib/ | ||
| + | else ifeq ($(CONFIGURATION, | ||
| + | LINK_FILE_PATH=lib/ | ||
| + | endif | ||
| + | </ | ||
| + | |||
| + | 下記は $(LinkFilepath) Property が定義されていない場合にデフォルト値の設定を行います。 | ||
| + | 他の場所ですでに定義されている場合は何もしません。 | ||
| + | |||
| + | <code xml> | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Makefile にそのまま翻訳するなら下記の通り。(または ifndef を使う) | ||
| + | |||
| + | <code make> | ||
| + | ifeq ($(LINK_FILE_PATH), | ||
| + | LINK_FILE_PATH=lib/ | ||
| + | endif | ||
| + | </ | ||
| + | |||
| + | ただし Makefile にはもっと便利な書き方があるので、実際には下記の 1 行で済みます。 | ||
| + | |||
| + | <code make> | ||
| + | LINK_FILE_PATH? | ||
| + | </ | ||
| 行 447: | 行 495: | ||
| ====== VisualStudio での利用 ====== | ====== VisualStudio での利用 ====== | ||
| + | VisualStudio で生成された Project File を編集して、自分で Property や Item の定義、Target の追加などを行うことができます。 | ||
| + | 例えば外部参照しているライブラリのパスなど、任意の Property を追加しておけば VisualStudio の設定画面で参照できます。 | ||
| + | |||
| + | Custom Build に相当する Target を追加することもできます。 | ||
| + | Target の AfterTargets, | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== 定義を共有する ===== | ||
| - | ===== 定義を共有する方法 ===== | ||
| 複数の Project で定義内容を共有するには Import を使います。 | 複数の Project で定義内容を共有するには Import を使います。 | ||
| + | 例えば下記のように build_def.props と build_def.targets を作成しておきます。 | ||
| + | |||
| + | <code xml> | ||
| + | <?xml version=" | ||
| + | <!-- build_def.props --> | ||
| + | <Project xmlns=" | ||
| + | |||
| + | < | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <code xml> | ||
| + | <?xml version=" | ||
| + | <!-- build_def.targets --> | ||
| + | <Project xmlns=" | ||
| + | |||
| + | <Target Name=""> | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | VisualStudio の *.vcxproj ファイルの先頭と最後にそれぞれ Import で build_def.props , build_def.targets を挿入します。 | ||
| + | 2箇所に分けるのは、シンボル定義はできるだけ先頭で行い、それらの定義を参照して実行する Target の定義はできるだけ後方で行いたいからです。 | ||
| + | |||
| + | <code xml> | ||
| + | <?xml version=" | ||
| + | <Project DefaultTargets=" | ||
| + | |||
| + | <Import Project=" | ||
| + | ~ | ||
| + | |||
| + | ~ | ||
| + | <Import Project=" | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== 実際の使用例 ===== | ||
| + | |||
| + | build_def.props の例。 | ||
| + | 自分独自のデフォルトの include path, lib path を設定しておくことができます。 | ||
| + | VisualStudio の設定で @(MyIncludePath) や @(MyLibPath) を追加しておけば、build_def.props の編集だけで複数のプロジェクトにまたがる設定を変更することが可能。 | ||
| + | また Compiler の CommandLine に $(MyCFlags) を追加しておけば、コンパイラオプションも一箇所で変更可能になります。 | ||
| + | 下記のように Release, Debug それぞれ異なる設定にすることも可能。 | ||
| + | |||
| + | - Configuration Properties → < | ||
| + | - Configuration Properties → < | ||
| + | - Configuration Properties → Linker → General → Additional Library Directories に @(MyLibPath) を追加 | ||
| + | |||
| + | <code xml> | ||
| + | <?xml version=" | ||
| + | <Project xmlns=" | ||
| + | |||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | build_def.targets の例。 | ||
| + | vcxproj ファイルと同じ場所に CustomPreBuild.bat または CustomPostBuild.bat が存在していれば Build の前後に実行します。 | ||
| + | VisualStudio 上から設定する Custom Build との違いは、bat ファイルが存在していなければ何もしないことです。 | ||
| + | 無駄なシェルの起動などを回避できます。 | ||
| + | |||
| + | <code xml> | ||
| + | <?xml version=" | ||
| + | <Project xmlns=" | ||
| + | |||
| + | <Target Name=" | ||
| + | <Exec Command=" | ||
| + | </ | ||
| + | |||
| + | <Target Name=" | ||
| + | <Exec Command=" | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| 行 463: | 行 624: | ||
| * default が Minimal なので好きな Level まで上げます。 | * default が Minimal なので好きな Level まで上げます。 | ||
| * Message Task を利用したデバッグ出力だけなら Normal で十分です。 | * Message Task を利用したデバッグ出力だけなら Normal で十分です。 | ||
| - | * 条件判定などより詳しい情報が必要なら Detailed にします。 | + | * 条件判定の結果などより詳しい情報が必要なら Detailed にします。 |
| + | |||
| + | |||
| + | |||
| + | ====== Command Line からの呼び出し ====== | ||
| + | |||
| + | 例 | ||
| + | |||
| + | < | ||
| + | msbuild / | ||
| + | </ | ||
opengl/visual_studio.1436101534.txt.gz · 最終更新: (外部編集)
