在cmake中有没有连接字符串的方法?
我有一个文件夹,其中只包含带有main方法的.cpp文件。我认为只需使用foreach遍历所有src文件,这会很容易。这就是我到目前为止所得到的:
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})
我该如何做评论中描述的事情呢?
发布于 2013-08-02 04:07:48
"${src}.out"
应该可以很好地工作,所以您可以编写set(NAME "${src}.out")
并在需要的任何地方使用${NAME}
。
发布于 2018-11-04 16:58:02
三种典型的CMake字符串连接方法
虽然这个问题的答案最好是通过set
或string
来处理,但如果您想要连接带有任意字符的字符串,还有第三种可能性是list
。
set()
只需像bash中那样组合字符串
set(FILE file)
set(FILE_TXT ${FILE}.txt)
message(STATUS "FILE_TXT: ${FILE_TXT}")
字符串(CONCAT)
将所有输入参数连接在一起,并将结果存储在命名的输出变量中。
string(CONCAT MULTI "xxxx" "YYYY" "xxxx")
message(STATUS "MULTI: ${MULTI}")
列表(追加)
将元素追加到列表中。
当涉及到编译器标志之类的东西时,这是首选的工具。CMake中的列表只是用分号分隔的字符串,当您引用它们时,您会得到用分号连接的列表。
list(APPEND FLAGS "-D option1")
list(APPEND FLAGS "-D option2")
list(APPEND FLAGS "-D option3")
list(JOIN FLAGS " " FLAGS)
message(STATUS "FLAGS: " ${FLAGS})
发布于 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:
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}")
完整标准输出:
-- DEBUG: x=hellogoodbye
-- DEBUG: y=hellogoodbye
-- Configuring done
-- Generating done
-- Build files have been written to: /home/_______/testing/_______
https://stackoverflow.com/questions/18001198
复制相似问题