首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在cmake中连接字符串

如何在cmake中连接字符串
EN

Stack Overflow用户
提问于 2013-08-02 01:55:55
回答 4查看 52.7K关注 0票数 51

在cmake中有没有连接字符串的方法?

我有一个文件夹,其中只包含带有main方法的.cpp文件。我认为只需使用foreach遍历所有src文件,这会很容易。这就是我到目前为止所得到的:

代码语言:javascript
复制
project(opengl-tutorial)
cmake_minimum_required(VERSION 2.8)

aux_source_directory(. SRC_LIST)

add_definitions(
    --std=c++11
)

foreach (src ${SRC_LIST})
    # name = ${src} + ".out"
    add_executable(${name} ${src})
    target_link_libraries(${name} GL GLU GLEW glfw)
endforeach(src ${SRC_LIST})

我该如何做评论中描述的事情呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-02 04:07:48

"${src}.out"应该可以很好地工作,所以您可以编写set(NAME "${src}.out")并在需要的任何地方使用${NAME}

票数 55
EN

Stack Overflow用户

发布于 2018-11-04 16:58:02

三种典型的CMake字符串连接方法

虽然这个问题的答案最好是通过setstring来处理,但如果您想要连接带有任意字符的字符串,还有第三种可能性是list

set()

只需像bash中那样组合字符串

代码语言:javascript
复制
set(FILE file)
set(FILE_TXT ${FILE}.txt)
message(STATUS "FILE_TXT: ${FILE_TXT}")

字符串(CONCAT)

将所有输入参数连接在一起,并将结果存储在命名的输出变量中。

string(CONCAT [...])

代码语言:javascript
复制
string(CONCAT MULTI "xxxx" "YYYY" "xxxx")
message(STATUS "MULTI: ${MULTI}")

列表(追加)

将元素追加到列表中。

list(APPEND [ ...])

当涉及到编译器标志之类的东西时,这是首选的工具。CMake中的列表只是用分号分隔的字符串,当您引用它们时,您会得到用分号连接的列表。

代码语言:javascript
复制
list(APPEND FLAGS "-D option1")
list(APPEND FLAGS "-D option2")
list(APPEND FLAGS "-D option3")
list(JOIN FLAGS " " FLAGS)
message(STATUS "FLAGS: " ${FLAGS})
票数 17
EN

Stack Overflow用户

发布于 2017-03-27 22:10:07

如果您只想处理字符串值,请参阅@nonexplosive's answer

但是,如果希望在CMakeLists.txt中包含Cmake变量并将该变量设置为某个值,请使用:string()表示Cmake 3.0+ (https://cmake.org/cmake/help/v3.0/command/string.html)或set()表示Cmake 2.0+。

您有两个选项的原因是因为较旧的cmake不支持CONCAT特性。

示例CMakeLists.txt:

代码语言:javascript
复制
cmake_minimum_required(VERSION 2.8.11)
project(Hello)
string(CONCAT x "hello" "goodbye")
set(y "hellogoodbye")
message(STATUS "DEBUG: x=${x}")
message(STATUS "DEBUG: y=${y}")

完整标准输出:

代码语言:javascript
复制
-- DEBUG: x=hellogoodbye
-- DEBUG: y=hellogoodbye
-- Configuring done
-- Generating done
-- Build files have been written to: /home/_______/testing/_______
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18001198

复制
相关文章

相似问题

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