CMakeでVisual Studio IDE向けソースファイル設定を自在に制御!VS_SOURCE_SETTINGS_tool徹底解説


使用方法

このプロパティは、ターゲットに対して以下の形式で設定します。

set_property(TARGET ターゲット名 PROPERTIES VS_SOURCE_SETTINGS_tool "<tool>=<key1>=<value1>;<key2>=<value2>;...;<tool>=<key1>=<value1>;<key2>=<value2>;...>")

ここで、

  • <value> は、プロパティ値です。
  • <key> は、設定するプロパティ名です。Visual Studio IDEでは、以下のプロパティがサポートされています。
    • IncludePath: インクルードパスのリスト
    • LibraryPath: ライブラリパスのリスト
    • PreprocessorDefinitions: プリプロセッサ定義のリスト
    • AdditionalIncludeDirectories: 追加のインクルードディレクトリのリスト
    • AdditionalLibraryDirectories: 追加のライブラリディレクトリのリスト
    • PreprocessorDefinitions: 追加のプリプロセッサ定義のリスト
  • <tool> は、設定を適用するツール名です。Visual Studio IDEでは、以下のツールがサポートされています。
    • C++: cl.exe
    • C: cl.exe
    • MIDL: midl.exe
    • RC: rc.exe
    • ASM: masm.exe
    • LINK: link.exe
  • <ターゲット名> は、設定を適用するターゲットの名前です。

以下の例では、mytarget ターゲットに対して、C++ コンパイラ (cl.exe) の設定を指定します。

set_property(TARGET mytarget PROPERTIES VS_SOURCE_SETTINGS_tool "cl.exe;IncludePath=C:/include;LibraryPath=C:/lib")

この例では、Visual Studio IDEは mytarget ターゲットのソースファイルをコンパイルする際に、以下の設定を使用します。

  • ライブラリパス: C:/lib
  • インクルードパス: C:/include
  • VS_SOURCE_SETTINGS_tool プロパティは、Visual Studio 2010 以降でのみサポートされます。
  • 同じツールの設定を複数指定するには、同じ tool を使用して複数の key=... ペアを指定します。
  • 複数のツールに対して設定を指定するには、セミコロン (;) で区切って複数の tool=... ペアを指定します。


cmake_minimum_required(VERSION 3.10)

project(myproject)

add_executable(mytarget mytarget.cpp)

set_property(TARGET mytarget PROPERTIES VS_SOURCE_SETTINGS_tool "cl.exe;IncludePath=C:/include;LibraryPath=C:/lib;cl.exe;PreprocessorDefinitions=DEBUG;_DEBUG")

このコードは、以下の操作を行います。

  1. CMake の最小バージョンを 3.10 に設定します。
  2. myproject という名前のプロジェクトを作成します。
  3. mytarget.cpp という名前のソースファイルから mytarget という名前の実行可能ファイルを作成します。
  4. mytarget ターゲットに対して、以下の Visual Studio IDE 向けのソースファイル設定を指定します。
    • C++ コンパイラ (cl.exe) のインクルードパスを C:/include に設定します。
    • C++ コンパイラ (cl.exe) のライブラリパスを C:/lib に設定します。
    • C++ コンパイラ (cl.exe) のプリプロセッサ定義を DEBUG;_DEBUG に設定します。

このコードを実行すると、Visual Studio IDE で myproject プロジェクトを開くと、以下の設定が適用されます。

  • mytarget.cpp ファイルをコンパイルする際に、DEBUG_DEBUG というマクロが定義されます。
  • mytarget.cpp ファイルをコンパイルする際に、C:/include ディレクトリと C:/lib ディレクトリが検索されます。

このコードはあくまで一例であり、プロジェクトのニーズに合わせて設定を調整する必要があります。

  • このコードでは、Visual Studio 2019 を使用することを想定しています。Visual Studio の他のバージョンを使用している場合は、設定を調整する必要がある場合があります。
  • このコードでは、mytarget.cpp ファイルが単一のソースファイルであることを想定しています。複数のソースファイルからなるプロジェクトの場合は、それぞれのソースファイルに対して個別に設定を指定する必要があります。


個別の CMake プロパティを使用する

"VS_SOURCE_SETTINGS_tool" プロパティを使用する代わりに、個別の CMake プロパティを使用して Visual Studio IDE 向けのソースファイル設定を指定することができます。以下の表は、"VS_SOURCE_SETTINGS_tool" プロパティで設定できるプロパティと、それに相当する個別の CMake プロパティを示しています。

VS_SOURCE_SETTINGS_tool プロパティ個別の CMake プロパティ
IncludePathCMAKE_INCLUDE_PATH
LibraryPathCMAKE_LIBRARY_PATH
PreprocessorDefinitionsCMAKE_PREPROCESSOR_DEFINITIONS
AdditionalIncludeDirectoriesCMAKE_INCLUDE_DIRS
AdditionalLibraryDirectoriesCMAKE_LIBRARY_DIRS

以下の例では、mytarget ターゲットに対して、C++ コンパイラ (cl.exe) の設定を個別の CMake プロパティを使用して指定します。

cmake_minimum_required(VERSION 3.10)

project(myproject)

add_executable(mytarget mytarget.cpp)

set(CMAKE_INCLUDE_PATH "C:/include")
set(CMAKE_LIBRARY_PATH "C:/lib")
set(CMAKE_PREPROCESSOR_DEFINITIONS "DEBUG;_DEBUG")

target_link_libraries(mytarget some_library)

このコードは、"VS_SOURCE_SETTINGS_tool" プロパティを使用する代わりに、個別の CMake プロパティを使用して以下の設定を指定しています。

  • C++ コンパイラ (cl.exe) のプリプロセッサ定義を DEBUG;_DEBUG に設定します。
  • C++ コンパイラ (cl.exe) のライブラリパスを C:/lib に設定します。
  • C++ コンパイラ (cl.exe) のインクルードパスを C:/include に設定します。

Visual Studio プロジェクトファイルを使用する

Visual Studio プロジェクトファイル (.vcproj) を手動で編集して、Visual Studio IDE 向けのソースファイル設定を指定することもできます。ただし、この方法は時間と労力のかかる方法であり、CMake を使用する場合よりも柔軟性が低くなります。

Visual Studio IDE を直接使用する

Visual Studio IDE を直接使用して、Visual Studio IDE 向けのソースファイル設定を指定することもできます。ただし、この方法は CMake を使用する場合よりも煩雑であり、プロジェクトの規模が大きくなると管理が難しくなります。

"VS_SOURCE_SETTINGS_tool" の代替方法の選択

"VS_SOURCE_SETTINGS_tool" の代替方法を選択する際には、以下の点を考慮する必要があります。

  • チームのワークフロー
  • 開発者のスキルと経験
  • プロジェクトの規模と複雑性