1. ホーム
  2. cmake

[解決済み] プロジェクトでCMAKE_CXX_FLAGSを変更する

2022-02-09 05:55:23

質問

CMakeLists.txtに以下のような内容があります。

project( Matfile )

SET ( CMAKE_CXX_FLAGS "-std=c++0x" )

set ( SOURCES
      "foo.cpp"
      "bar.cpp"
    )

add_library(
        Matfile
        ${SOURCES}
)

ご想像の通り、私がやりたいことは、-std=c++0xというフラグを使ってC++ソースをコンパイルすることです(私はgccを使っているので、C++11の機能が必要なのです)。残念ながら、これはうまくいきません。cmake を使って makefile を生成すると、CMAKE_CXX_FLAGS という変数が完全に無効になってしまうのです。

この変数をプロジェクトファイルに設定するにはどうしたらよいでしょうか。

非常に愚かな質問のようですが、私はこれを理解するために2時間以上を費やしたところです。

どのように解決するのですか?

最も簡単な解決策は add_compile_options() バージョン 2.8.12 以降を使用している場合。 それ以前のバージョンでは、"abuse"が可能です。 add_definitions() . これは、add -D フラグのためだけのものですが、他のどのようなコンパイラフラグでも動作します。しかし、そのような使い方は想定しておらず、将来のバージョンで壊れる可能性があると思います。

add_compile_options(-std=c++0x) # CMake 2.8.12 or newer

または

add_definitions(-std=c++0x) # CMake 2.8.11 or older

CMake 3.3 からは、このフラグを特定の言語のみに適用させることもできます(例:C または C++ のみ)。奇妙なジェネレーター式の構文を使用してください。

 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-std=c++14> $<$<COMPILE_LANGUAGE:C>:-std=c99>)

しかし、これは Visual Studio のジェネレーターでは動作しません。 そのため、Make/Ninjaジェネレータにのみ使用するか、または ターゲット_コンパイル_オプション() を使用して、ターゲットごとに設定します。