Visual Studio IDEのターゲット操作を拡張:CMakeのVS_KEYWORDとカスタムプロパティ


CMake の "Properties: Targets" における "VS_KEYWORD" プロパティは、Visual Studio プロジェクトファイルで生成されるターゲットのキーワードを設定するために使用されます。このキーワードは、Visual Studio の統合環境 (IDE) でターゲットを識別するために使用されます。

用途

"VS_KEYWORD" プロパティは、以下のような場合に役立ちます。

  • Visual Studio IDE でのターゲットのグループ化
    "VS_KEYWORD" プロパティを使用して、Visual Studio IDE でターゲットをグループ化することができます。
  • Visual Studio IDE でのターゲットのフィルタリング
    "VS_KEYWORD" プロパティを使用して、Visual Studio IDE で表示されるターゲットをフィルタリングすることができます。
  • Visual Studio IDE でのターゲットの識別
    複数のターゲットが存在する場合、"VS_KEYWORD" プロパティを使用して、各ターゲットをわかりやすく識別することができます。

設定方法

"VS_KEYWORD" プロパティは、CMake の target_properties() コマンドを使用して設定することができます。以下の例は、"mytarget" というターゲットの "VS_KEYWORD" プロパティを "Qt4VSv1.0" に設定する方法を示します。

target_properties(mytarget PROPERTIES VS_KEYWORD Qt4VSv1.0)

Visual Studio 10 (2010) 以降

Visual Studio 10 (2010) 以降では、"VS_GLOBAL_KEYWORD" プロパティを使用して、すべてのターゲットに共通のキーワードを設定することができます。以下の例は、すべてのターゲットの "VS_GLOBAL_KEYWORD" プロパティを "Qt4" に設定する方法を示します。

set(VS_GLOBAL_KEYWORD Qt4)
  • "VS_KEYWORD" プロパティと "VS_GLOBAL_KEYWORD" プロパティを同時に設定することはできません。
  • "VS_KEYWORD" プロパティは、Visual Studio 9 (2008) 以前でのみ使用できます。Visual Studio 10 (2010) 以降では、"VS_GLOBAL_KEYWORD" プロパティを使用する必要があります。

以下の例は、"myproject" というプロジェクトで "mytarget" というターゲットを作成し、"VS_KEYWORD" プロパティを "Qt4VSv1.0" に設定する方法を示します。

cmake_minimum_required(VERSION 3.0)

project(myproject)

add_executable(mytarget mytarget.cpp)

target_properties(mytarget PROPERTIES VS_KEYWORD Qt4VSv1.0)

この例を実行すると、Visual Studio IDE で "myproject" プロジェクトを開くと、"mytarget" ターゲットが "Qt4VSv1.0" というキーワードで識別されます。



cmake_minimum_required(VERSION 3.0)

project(myproject)

add_executable(mytarget mytarget.cpp)

target_properties(mytarget PROPERTIES VS_KEYWORD Qt4VSv1.0)

例 2: 複数のターゲットの "VS_KEYWORD" プロパティ設定

この例では、"mytarget1" と "mytarget2" という名前の 2 つのターゲットの "VS_KEYWORD" プロパティを設定します。

cmake_minimum_required(VERSION 3.0)

project(myproject)

add_executable(mytarget1 mytarget1.cpp)
target_properties(mytarget1 PROPERTIES VS_KEYWORD Qt4VSv1.0)

add_executable(mytarget2 mytarget2.cpp)
target_properties(mytarget2 PROPERTIES VS_KEYWORD Qt5VSv1.0)

例 3: "VS_GLOBAL_KEYWORD" プロパティを使用してすべてのターゲットに共通のキーワードを設定

この例では、すべてのターゲットに共通の "VS_KEYWORD" プロパティを "Qt" に設定します。

cmake_minimum_required(VERSION 3.10)

project(myproject)

set(VS_GLOBAL_KEYWORD Qt)

add_executable(mytarget1 mytarget1.cpp)
add_executable(mytarget2 mytarget2.cpp)

この例を実行すると、Visual Studio IDE で "myproject" プロジェクトを開くと、"mytarget1" と "mytarget2" の両方のターゲットが "Qt" というキーワードで識別されます。

  • 上記の例は、あくまでも基本的な例であり、実際の使用状況に合わせて変更する必要があります。


"TARGET_COMPILE_FLAGS"プロパティ

"TARGET_COMPILE_FLAGS"プロパティを使用して、Visual Studio IDEでターゲットに表示されるカスタムキーワードを設定することができます。この方法は、"VS_KEYWORD"プロパティよりも柔軟性が高く、ターゲットに固有の情報を設定することができます。


target_properties(mytarget PROPERTIES TARGET_COMPILE_FLAGS "/MT")

この例では、"mytarget"ターゲットに "/MT" というコンパイラフラグが設定され、Visual Studio IDEでこのフラグが表示されます。

利点

  • ターゲットに固有の情報を設定できる
  • "VS_KEYWORD"プロパティよりも柔軟性が高い

欠点

  • "VS_KEYWORD"プロパティよりも複雑

"CMAKE_VS_CUSTOM_COMMAND_PROPERTIES"変数

"CMAKE_VS_CUSTOM_COMMAND_PROPERTIES"変数を使用して、Visual Studio IDEでターゲットに表示されるカスタムプロパティを設定することができます。この方法は、ターゲット以外にもプロジェクト全体に適用できるという利点があります。


set(CMAKE_VS_CUSTOM_COMMAND_PROPERTIES mytarget COMMAND_ARGUMENTS "/MT")

この例では、"mytarget"ターゲットに "/MT" というコマンドライン引数が設定され、Visual Studio IDEでこの引数が表示されます。

利点

  • ターゲット以外にもプロジェクト全体に適用できる

欠点

  • "VS_KEYWORD"プロパティよりも複雑

"CUSTOM_TARGET_PROPERTIES"コマンド

"CUSTOM_TARGET_PROPERTIES"コマンドを使用して、Visual Studio IDEでターゲットに表示されるカスタムプロパティを設定することができます。この方法は、CMake 3.15以降で使用可能であり、他の方法よりも簡潔で分かりやすいという利点があります。


custom_target_properties(mytarget PROPERTIES VS_CUSTOM_COMMAND_PROPERTIES COMMAND_ARGUMENTS "/MT")

この例は、上記の例と同じ動作をします。

利点

  • 簡潔で分かりやすい

欠点

  • CMake 3.15以降でのみ使用可能

Visual Studio IDEのプロジェクト設定

Visual Studio IDEのプロジェクト設定を使用して、ターゲットに表示されるカスタムキーワードを設定することができます。この方法は、最も簡単ですが、CMakeファイルを変更する必要がないという利点があります。


  1. Visual Studio IDEでプロジェクトを開きます。
  2. "ソリューション エクスプローラー"でターゲットを右クリックします。
  3. "プロパティ"を選択します。
  4. "構成プロパティ" > "全般"を選択します。
  5. "カスタム キーワード"フィールドに、目的のキーワードを入力します。

利点

  • CMakeファイルを変更する必要がない
  • ターゲット以外にもプロジェクト全体に適用できない
  • "VS_KEYWORD"プロパティよりも柔軟性がない
方法利点欠点
TARGET_COMPILE_FLAGS柔軟性が高い複雑
CMAKE_VS_CUSTOM_COMMAND_PROPERTIESプロジェクト全体に適用できる複雑
CUSTOM_TARGET_PROPERTIES (CMake 3.15以降)簡潔で分かりやすいCMake 3.15以降でのみ使用可能
Visual Studio IDEのプロジェクト設定簡単柔軟性がない