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のマニュアルを調べましたが、ここで何が間違っているのかわかりませんでした。
ありがとう、トビアス
代わりにこれを試してください:
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リストが作成されているようなものです。
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つのターゲットから他のターゲットに推移的に転送できます。