Tob*_*iSF 14 c c++ cmake compiler-flags linker-flags
我正在使用CMake进行两个版本的项目,其中一个需要-lglapi而另一个则不需要.
到目前为止,我们使用的线条看起来像这样:
SET(CMAKE_C_FLAGS "-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm")
SET(CMAKE_CXX_FLAGS "-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm")
Run Code Online (Sandbox Code Playgroud)
我在我的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)
Run Code Online (Sandbox Code Playgroud)
SINGLE_MODE变量定义了一点点.当我使用message命令显示标志变量的内容时,它看起来没问题:
-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm -lglapi
Run Code Online (Sandbox Code Playgroud)
但是当我开始编译时,我遇到了编译错误.使用详细模式我意识到在编译器调用中看起来像:
-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm; -lglapi
Run Code Online (Sandbox Code Playgroud)
也就是说,在将-lglapi添加到列表之前添加了分号.
这里有没有人遇到类似的问题,并知道解决这个问题的方法?我用谷歌搜索了很长一段时间并研究了CMake手册,但看不出我在这里做错了什么.
谢谢,托比亚斯
jpo*_*o38 23
尝试这样做:
if(SINGLE_MODE)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lglapi")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lglapi")
endif(SINGLE_MODE)
Run Code Online (Sandbox Code Playgroud)
然后,您确定要附加-lglapi到现有${CMAKE_CXX_FLAGS}字符串.否则,看起来像正在创建一个CMake列表.
从CMake 3.4开始,您可以:
string(APPEND CMAKE_CXX_FLAGS " -lglapi")
Run Code Online (Sandbox Code Playgroud)
当你只想为一种语言设置标志时(上例中的C++),这非常方便,但如果你想为所有语言设置相同的标志,你可以简单地做:
add_compile_options(-lglapi)
Run Code Online (Sandbox Code Playgroud)
这两个命令都会更改整个目录的标志,如果只想为一个目标设置标志,请执行以下操作:
target_compile_options(my_lib PUBLIC -lglapi)
Run Code Online (Sandbox Code Playgroud)
目标上的标志可以是PUBLIC,PRIVATE或INTERFACE,允许将标志从一个目标传递到另一个目标.
| 归档时间: |
|
| 查看次数: |
23219 次 |
| 最近记录: |