opengl:visual_studio
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン次のリビジョン両方とも次のリビジョン | ||
opengl:visual_studio [2015/07/05 22:05] – [定義を共有する方法] oga | opengl:visual_studio [2015/07/05 23:17] – [定義を共有する] oga | ||
---|---|---|---|
行 16: | 行 16: | ||
以下 Makefile (主に GNU make) と比較しながら MSBuild の xml 記述方法を簡単に説明します。 | 以下 Makefile (主に GNU make) と比較しながら MSBuild の xml 記述方法を簡単に説明します。 | ||
+ | |||
+ | |||
+ | |||
+ | ===== 参考ページ ===== | ||
+ | |||
+ | * [[https:// | ||
行 83: | 行 89: | ||
Makefile で同様の定義をしてみましょう。 | Makefile で同様の定義をしてみましょう。 | ||
- | < | + | < |
# Makefile | # Makefile | ||
COPY_FILE=$(COPY_SRC)/ | COPY_FILE=$(COPY_SRC)/ | ||
行 96: | 行 102: | ||
下記の例では COPY_FILE に " | 下記の例では COPY_FILE に " | ||
- | < | + | < |
# Makefile | # Makefile | ||
COPY_SRC=C:/ | COPY_SRC=C:/ | ||
行 180: | 行 186: | ||
下記の .PHONY 宣言がそれに相当します。 | 下記の .PHONY 宣言がそれに相当します。 | ||
- | < | + | < |
# Makefile | # Makefile | ||
.PHONY: all | .PHONY: all | ||
行 203: | 行 209: | ||
Build 手順の各行は Tab で始まっている必要があります。 | Build 手順の各行は Tab で始まっている必要があります。 | ||
- | < | + | < |
# Makefile | # Makefile | ||
.PHONY: copy | .PHONY: copy | ||
行 245: | 行 251: | ||
.PHONY 宣言された Target は、常にファイルが存在していないものとみなします。 | .PHONY 宣言された Target は、常にファイルが存在していないものとみなします。 | ||
- | < | + | < |
# Makefile | # Makefile | ||
行 257: | 行 263: | ||
- | < | + | < |
# Makefile | # Makefile | ||
.PHONY: all | .PHONY: all | ||
行 332: | 行 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 | ||
行 344: | 行 350: | ||
nmake は若干書式が違います。 | nmake は若干書式が違います。 | ||
- | < | + | < |
# Makefile (nmake) | # Makefile (nmake) | ||
FILE_LIST=A.bak B.bak C.bak | FILE_LIST=A.bak B.bak C.bak | ||
行 427: | 行 433: | ||
Makefile では foreach に相当します。 | Makefile では foreach に相当します。 | ||
- | < | + | < |
$(foreach file, | $(foreach file, | ||
</ | </ | ||
行 433: | 行 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? | ||
+ | </ | ||
行 441: | 行 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=" | ||
+ | < | ||
+ | ... | ||
+ | </ | ||
- | ===== 動作の確認方法 ===== | + | < |
+ | ... | ||
+ | </ | ||
- | VisualStuido ではデフォルトでは Message などの出力内容が表示されません。 | + | </ |
- | 動作確認する場合はは次のように設定を変更しておくと便利です。 | + | </ |
- | - Menu の Tools → Options → Projects and Solutions → Build and Run を開く | + | <code xml> |
- | - MSBuild project build output verbosity と MSBuild project build log file verbosity を変更 | + | <?xml version=" |
- | * default が Minimal なので好きな Level まで上げます。 | + | <!-- build_def.targets --> |
- | * Message Task を利用したデバッグ出力だけなら Normal で十分です。 | + | <Project xmlns=" |
- | * 条件判定などより詳しい情報が必要なら Detailed にします。 | + | |
+ | <Target Name=""> | ||
+ | ... | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
- | ===== 参考ページ ===== | ||
- | | + | VisualStudio の *.vcxproj |
+ | 2箇所に分けるのは、シンボル定義はできるだけ先頭で行い、それらの定義を参照して実行する Target の定義はできるだけ後方で行いたいからです。 | ||
+ | <code xml> | ||
+ | <?xml version=" | ||
+ | <Project DefaultTargets=" | ||
+ | <Import Project=" | ||
+ | ~ | ||
+ | ~ | ||
+ | <Import Project=" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== 実際の使用例 ===== | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== 動作の確認方法 ===== | ||
+ | |||
+ | VisualStuido ではデフォルトでは Message などの出力内容が表示されません。 | ||
+ | 動作確認する場合はは次のように設定を変更しておくと便利です。 | ||
+ | |||
+ | - Menu の Tools → Options → Projects and Solutions → Build and Run を開く | ||
+ | - MSBuild project build output verbosity と MSBuild project build log file verbosity を変更 | ||
+ | * default が Minimal なので好きな Level まで上げます。 | ||
+ | * Message Task を利用したデバッグ出力だけなら Normal で十分です。 | ||
+ | * 条件判定の結果などより詳しい情報が必要なら Detailed にします。 | ||
opengl/visual_studio.txt · 最終更新: 2021/12/18 17:58 by oga