1. ホーム

cmake compile_options add_compile_options CMAKE_CXX_FLAGS 差分

2022-02-26 08:56:17

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++コンパイラ専用です。

例えば、次のようなコードです。

# Determine the compiler type, if it is a gcc compiler, add c++11 support to the compile options
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++11 対応のコンパイルができます。しかし add_compile_options はすべての種類のコンパイラーに固有のものであるため、cコードをコンパイルすると、次のようなWARNINGが生成されます。

J:\workspace.gcc>make b64
[ 50 % ] C オブジェクトのビルド libb64/CMakeFiles/b64.dir/libb64-1.2.1/src/cdecode.c.obj
cc1.exe: 警告: コマンドラインオプション '-std=c++11' は C++/ObjC++ では有効だが、C では無効である。
[100%] C オブジェクトのビルド libb64/CMakeFiles/b64.dir/libb64-1.2.1/src/cencode.c.obj
cc1.exe: 警告: コマンドラインオプション '-std=c++11' は C++/ObjC++ では有効だが、C では無効である。
C言語のスタティックライブラリ libb64.a をリンクする
[100%] ターゲット b64 をビルド

コンパイルには影響しませんが、見た目が悪いです。この警告をなくすためには add_compile_options を追加するのではなく、c++コンパイラにのみこのオプションを追加します。
そこで、以下のようにコードを変更すると、警告が消えます。

# determine the compiler type, if it is gcc compiler, then add c++11 support to the compiler options
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)