首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >追加到CMAKE_C_FLAGS

追加到CMAKE_C_FLAGS
EN

Stack Overflow用户
提问于 2015-04-28 00:35:44
回答 3查看 36.7K关注 0票数 23

我正在为一个项目使用CMake,该项目有两个版本,一个需要-lglapi,另一个不需要。

到目前为止,我们使用的代码行如下所示:

代码语言:javascript
复制
SET(CMAKE_C_FLAGS "-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm")
SET(CMAKE_CXX_FLAGS "-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm")

我在CMakeList.txt中的这些行后面添加了一条if语句:

代码语言:javascript
复制
if(SINGLE_MODE)
    SET(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} " -lglapi")
    SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} " -lglapi")
endif(SINGLE_MODE)

SINGLE_MODE变量的定义稍微向上一点。当我使用message命令来显示标志变量的内容时,它看起来没有问题:

代码语言:javascript
复制
-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm -lglapi

但是当我开始编译时,我遇到了编译错误。使用详细模式,我意识到在编译器调用中,它看起来是这样的:

代码语言:javascript
复制
-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm; -lglapi

例如,在将-lglapi添加到列表之前,以某种方式添加了一个分号。

这里有没有人遇到过类似的问题,并且知道解决这个问题的方法?我用谷歌搜索了很长一段时间,研究了CMake手册,但看不出我在这里做错了什么。

谢谢,托拜厄斯

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-28 00:49:06

试着这样做:

代码语言:javascript
复制
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列表。

票数 29
EN

Stack Overflow用户

发布于 2018-01-05 21:16:26

CMake 3.4开始,您需要:

代码语言:javascript
复制
string(APPEND CMAKE_CXX_FLAGS " -lglapi")

当您只想为一种语言(上面示例中的C++)设置标志时,这非常方便,但是如果您想为所有语言设置相同的标志,您可以简单地这样做:

代码语言:javascript
复制
add_compile_options(-lglapi)

这两个命令都会更改整个目录的标志,如果您只想为一个目标设置标志,请执行以下操作:

代码语言:javascript
复制
target_compile_options(my_lib PUBLIC -lglapi)

目标上的标志可以是PUBLIC, PRIVATE or INTERFACE,允许将标志从一个目标传递到另一个目标。

票数 17
EN

Stack Overflow用户

发布于 2020-12-03 01:11:53

对于您想要添加编译器和链接器选项(如for --coverage选项)的特定情况,以下语法将向链接器和编译器添加标志:

代码语言:javascript
复制
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")

(上面的命令将--coverage选项添加到C和C++的编译器和标志选项中)

否则,如果您更喜欢使用新的CMake命令(add_compile_options和add_link_options),也不要忘记添加到链接器选项:

代码语言:javascript
复制
add_compile_options(--coverage)
add_link_options(--coverage)

(上面的命令将--coverage选项添加到C和C++的编译器和标志选项中)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29901352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档