CMake: さらなるレベルアップを目指す! CMAKE_NOT_USING_CONFIG_FLAGSとCMakeLists.txtの連携術


CMAKE_NOT_USING_CONFIG_FLAGS は、CMake の内部で使用される変数であり、ジェネレータが _BUILD_TYPE フラグを無視するように指示します。これは、主に CMake GUI を使用してプロジェクトを構成する場合に役立ちます。

用途

この変数は、CMake GUI でプロジェクトを構成する場合に、ビルドタイプに関連するオプションを無効化するために使用されます。例えば、デフォルトのビルドタイプが Debug である場合、CMake GUI は Debug ビルドに関連するオプションを表示します。しかし、CMAKE_NOT_USING_CONFIG_FLAGSTRUE に設定すると、CMake GUI はこれらのオプションを非表示にし、代わりにプロジェクト固有のオプションのみを表示します。

設定方法

CMAKE_NOT_USING_CONFIG_FLAGS は、CMakeLists.txt ファイル内の cmake_minimum_required() コマンドを使用して設定できます。以下の例をご覧ください。

cmake_minimum_required(VERSION 3.14)

project(MyProject)

set(CMAKE_NOT_USING_CONFIG_FLAGS TRUE)

注意点

  • この変数は、CMake 3.14 以降でのみ使用できます。
  • CMAKE_NOT_USING_CONFIG_FLAGS は、CMake GUI でプロジェクトを構成する場合にのみ使用されます。コマンドラインから CMake を実行する場合には影響しません。

CMAKE_NOT_USING_CONFIG_FLAGS 変数は、主に CMake GUI を使用してプロジェクトを構成する場合に役立ちます。コマンドラインから CMake を実行する場合には、-DCMAKE_BUILD_TYPE=<build_type> オプションを使用してビルドタイプを指定できます。

cmake -DCMAKE_BUILD_TYPE=Release ..

このコマンドは、Release ビルドタイプを使用してプロジェクトをビルドします。



cmake_minimum_required(VERSION 3.14)

project(MyProject)

set(CMAKE_NOT_USING_CONFIG_FLAGS TRUE)

add_executable(my_app main.cpp)

この例では、CMAKE_NOT_USING_CONFIG_FLAGSTRUE に設定し、CMake GUI でプロジェクトを構成する場合にビルドタイプに関連するオプションを無効化します。

例 2: コマンドラインから CMake を実行する場合

cmake_minimum_required(VERSION 3.14)

project(MyProject)

set(CMAKE_BUILD_TYPE Release)

add_executable(my_app main.cpp)

この例では、CMAKE_BUILD_TYPERelease に設定し、コマンドラインから CMake を実行して Release ビルドタイプでプロジェクトをビルドします。

  • 上記の例はあくまで一例であり、プロジェクトの要件に応じて変更する必要があります。
  • この変数は、CMake 3.14 以降でのみ使用できます。
  • CMAKE_NOT_USING_CONFIG_FLAGS 変数は、CMake GUI でプロジェクトを構成する場合にのみ使用されます。コマンドラインから CMake を実行する場合には影響しません。


  • CMake 3.14 以降でのみ使用できます。
  • CMake GUI でプロジェクトを構成する場合にのみ使用できます。コマンドラインから CMake を実行する場合には影響しません。

これらの制限を回避するために、CMAKE_NOT_USING_CONFIG_FLAGS 変数の代わりに以下の代替方法を使用できます。

CMakeLists.txt ファイル内のオプションを直接設定する

ビルドタイプに関連するオプションを直接 CMakeLists.txt ファイル内に設定することで、CMake GUI でこれらのオプションを無効化することができます。

cmake_minimum_required(VERSION 3.14)

project(MyProject)

# デバッグビルドに関連するオプションを無効化
set(CMAKE_CXX_FLAGS_DEBUG "")
set(CMAKE_LINK_FLAGS_DEBUG "")

add_executable(my_app main.cpp)

この例では、CMAKE_CXX_FLAGS_DEBUGCMAKE_LINK_FLAGS_DEBUG 変数を使用して、デバッグビルドに関連するコンパイラフラグとリンカフラグを空文字列に設定しています。これにより、CMake GUI でデバッグビルドに関連するオプションが無効化されます。

カスタム CMake オプションを作成する

カスタム CMake オプションを作成し、そのオプションを使用してビルドタイプに関連するオプションを制御することもできます。

cmake_minimum_required(VERSION 3.14)

project(MyProject)

option(MY_BUILD_TYPE "Build Type" "Release")

if(MY_BUILD_TYPE STREQUAL "Release")
  # リリースビルドに関連するオプションを設定
  set(CMAKE_CXX_FLAGS "-O3")
  set(CMAKE_LINK_FLAGS "-s")
else()
  # デバッグビルドに関連するオプションを設定
  set(CMAKE_CXX_FLAGS "-g")
  set(CMAKE_LINK_FLAGS "-g")
endif()

add_executable(my_app main.cpp)

この例では、MY_BUILD_TYPE というカスタム CMake オプションを作成し、そのオプションを使用してビルドタイプを制御しています。MY_BUILD_TYPE オプションが "Release" に設定されている場合は、リリースビルドに関連するオプションが設定されます。そうでない場合は、デバッグビルドに関連するオプションが設定されます。

CMake ターゲットプロパティを使用する

CMake ターゲットプロパティを使用して、ビルドタイプに関連するオプションを制御することもできます。

cmake_minimum_required(VERSION 3.14)

project(MyProject)

set(CMAKE_CXX_STANDARD 17)

add_executable(my_app main.cpp)

target_link_libraries(my_app m)

target_compile_features(my_app PRIVATE c++17)

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  target_compile_options(my_app PRIVATE -g)
  target_link_options(my_app PRIVATE -g)
else()
  target_compile_options(my_app PRIVATE -O3)
  target_link_options(my_app PRIVATE -s)
endif()

この例では、target_compile_options()target_link_options() 関数を使用して、ビルドタイプに応じて my_app ターゲットのコンパイラフラグとリンカフラグを設定しています。

CMAKE_NOT_USING_CONFIG_FLAGS 変数は、CMake GUI でプロジェクトを構成する場合に、ビルドタイプに関連するオプションを無効化するために使用できる便利な変数ですが、いくつかの制限があります。これらの制限を回避するために、上記で紹介した代替方法を使用することができます。

  • 上記の例はあくまで一例であり、プロジェクトの要件に応じて変更する必要があります。