cmake
コンパイル機能とC / C ++標準選択
サーチ…
構文
- target_compile_features( ターゲット PRIVATE | PUBLIC | INTERFACE フィーチャ1 [ フィーチャ2 ...])
機能要件のコンパイル
必要なコンパイラ機能は、 target_compile_featuresコマンドを使用してターゲット上で指定できます。
add_library(foo
foo.cpp
)
target_compile_features(foo
PRIVATE # scope of the feature
cxx_constexpr # list of features
)
機能はCMAKE_C_COMPILE_FEATURESまたはCMAKE_CXX_COMPILE_FEATURESの一部でなければなりません。それ以外の場合、cmakeはエラーを報告します。 Cmakeは、 -std=gnu++11
などの必要なフラグをターゲットのコンパイルオプションに追加します。
この例では、機能がPRIVATE
と宣言されています。要件はターゲットに追加されますが、コンシューマには追加されません。 fooに対してターゲットビルディングに要件を自動的に追加するには、 PRIVATE
代わりにPUBLIC
またはINTERFACE
を使用する必要があります。
target_compile_features(foo
PUBLIC # this time, required as public
cxx_constexpr
)
add_executable(bar
main.cpp
)
target_link_libraries(bar
foo # foo's public requirements and compile flags are added to bar
)
C / C ++のバージョン選択
CMAKE_C_STANDARD
(受け入れられる値はCMAKE_CXX_STANDARD
)とCMAKE_CXX_STANDARD
(受け入れられる値はCMAKE_CXX_STANDARD
)を使用して、CおよびC ++の募集バージョンをグローバルに指定することができます。
set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 11)
これらは、ターゲットに必要なコンパイルオプションを追加します(例:gcc -std=c++11
)。
バージョンは、変数CMAKE_C_STANDARD_REQUIRED
およびCMAKE_CXX_STANDARD_REQUIRED
それぞれON
設定することによって、要件を満たすことができます。
ターゲット作成前に変数を設定する必要があります。バージョンは、ターゲットごとに指定することもできます。
set_target_properties(foo PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED ON
)
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow