web-dev-qa-db-ja.com

CMAKE_C_FLAGSに追加

2つのバージョンのプロジェクトにCMakeを使用しています。1つは-lglapiを必要とし、もう1つは必要としません。

これまでのところ、使用した行は次のようになります。

SET(CMAKE_C_FLAGS "-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm")
SET(CMAKE_CXX_FLAGS "-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm")

CMakeList.txtのifステートメントを次の行の直後に追加しました。

if(SINGLE_MODE)
    SET(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} " -lglapi")
    SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} " -lglapi")
endif(SINGLE_MODE)

SINGLE_MODE変数は少し上に定義されています。メッセージコマンドを使用してフラグ変数の内容を表示すると、問題ありません。

-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm -lglapi

しかし、コンパイルを開始すると、コンパイルエラーが発生します。冗長モードを使用して、コンパイラー呼び出しでは次のようになることに気付きました。

-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm; -lglapi

つまり-lglapiをリストに追加する前に、どういうわけかセミコロンが追加されました。

ここの誰かが同様の問題に遭遇し、この問題を修正する方法を知っていましたか?私はかなりググってCMakeのマニュアルを調べましたが、ここで何が間違っているのかわかりませんでした。

ありがとう、トビアス

17
TobiSF

代わりにこれを試してください:

if(SINGLE_MODE)
    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lglapi")
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lglapi")
endif(SINGLE_MODE)

次に、必ず-lglapiを既存の${CMAKE_CXX_FLAGS}文字列に追加します。そうでなければ、CMakeリストが作成されているようなものです。

25
jpo38

CMake 3.4 以降、

string(APPEND CMAKE_CXX_FLAGS " -lglapi")

これは、1つの言語(上記の例ではC++)のみにフラグを設定する場合に非常に便利ですが、すべての言語に同じフラグを設定する場合は、次のように簡単に実行できます。

add_compile_options(-lglapi)

どちらのコマンドもディレクトリ全体のフラグを変更します。1つのターゲットのみにフラグを設定する場合は、次のようにします。

target_compile_options(my_lib PUBLIC -lglapi)

ターゲット上のフラグは PUBLIC、PRIVATEまたはINTERFACE のいずれかであり、フラグを1つのターゲットから他のターゲットに推移的に転送できます。

9
Benoit Blanchon