24

私は 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 マニュアルを研究しましたが、ここで何が間違っていたのかわかりませんでした。

ありがとう、トバイアス

4

3 に答える 3

31

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

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 リストのようなものが作成されているように見えます。

于 2015-04-27T16:49:06.303 に答える