CMAKEコンパイルオプションの追加

4315 ワード

cmakeスクリプトでは、コンパイルオプションを設定するには、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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 一反三を挙げると、add_definitionsというコマンドも同じようにすべてのコンパイラに対して、同じようにこの違いに注意していることがわかります.