CMAKEコンパイルオプションの追加
4315 ワード
cmakeスクリプトでは、コンパイルオプションを設定するには、
例えば次のコード 1 2 3 4 5
J:\workspace\facecl.gcc>make b64 [ 50%] Building C object libb64/CMakeFiles/b64.dir/libb64-1.2.1/src/cdecode.c.obj cc1.exe: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C [100%] Building C object libb64/CMakeFiles/b64.dir/libb64-1.2.1/src/cencode.c.obj cc1.exe: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C Linking C static library libb64.a [100%] Built target b64
コンパイルに影響はありませんが、確かに不快ですね.このwarningを解消するには、 1 2 3 4 5 一反三を挙げると、
add_compile_options
コマンドを使用するか、setコマンドを使用してCMAKE_CXX_FLAGS
またはCMAKE_C_FLAGS
を変更します.この2つの方法では、場合によっては同じ効果がありますが、add_compile_options
コマンドで追加されたコンパイルオプションは、すべてのコンパイラ(cおよびc++コンパイラを含む)に対して使用され、setコマンド設定CMAKE_C_FLAGS
またはCMAKE_CXX_FLAGS
変数は、それぞれcおよびc++コンパイラに対してのみ使用されます.例えば次のコード
# , gcc , c++11
if(CMAKE_COMPILER_IS_GNUCXX)
add_compile_options(-std=c++11)
message(STATUS "optional:-std=c++11")
endif(CMAKE_COMPILER_IS_GNUCXX)
add_compile_options
を使用して-std=c++11
オプションを追加するのは、c++コードをコンパイルするときにc++11サポートオプションを追加したい場合です.ただし、add_compile_options
はすべてのタイプのコンパイラを対象としているため、cコードをコンパイルすると、次のwarningが発生する.J:\workspace\facecl.gcc>make b64 [ 50%] Building C object libb64/CMakeFiles/b64.dir/libb64-1.2.1/src/cdecode.c.obj cc1.exe: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C [100%] Building C object libb64/CMakeFiles/b64.dir/libb64-1.2.1/src/cencode.c.obj cc1.exe: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C Linking C static library libb64.a [100%] Built target b64
コンパイルに影響はありませんが、確かに不快ですね.このwarningを解消するには、
add_compile_options
ではなく、c++コンパイラにのみこのoptionを追加します.したがって、次のようにコードを変更すると、警告が消去されます.# , gcc , c++11
if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
message(STATUS "optional:-std=c++11")
endif(CMAKE_COMPILER_IS_GNUCXX)
add_definitions
というコマンドも同じようにすべてのコンパイラに対して、同じようにこの違いに注意していることがわかります.