ユーザ用ツール

サイト用ツール


opengl:visual_studio

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki