有没有办法在cmake中连接字符串?
我有一个文件夹,只包含主要方法的.cpp文件.我认为只需在所有src文件中使用foreach就可以轻松实现.这就是我迄今为止所拥有的:
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})
Run Code Online (Sandbox Code Playgroud)
我该怎么做评论中描述的内容?
Naf*_*man 47
"${src}.out"应该可以正常工作,因此您可以随时随地编写set(NAME "${src}.out")和使用${NAME}.
Cam*_*mer 16
虽然这个特定问题的答案最好通过set或处理string,但还有第三种可能性,那就是list如果您想将字符串与任意字符连接起来。
只需像在 bash 中一样组合字符串
set(FILE file)
set(FILE_TXT ${FILE}.txt)
message(STATUS "FILE_TXT: ${FILE_TXT}")
Run Code Online (Sandbox Code Playgroud)
将所有输入参数连接在一起并将结果存储在命名的输出变量中。
string(CONCAT MULTI "xxxx" "YYYY" "xxxx")
message(STATUS "MULTI: ${MULTI}")
Run Code Online (Sandbox Code Playgroud)
将元素追加到列表中。
当涉及到编译器标志之类的东西时,这是首选工具。CMake 中的列表只是用分号分隔的字符串,当你引用它们时,你会得到用分号连接的列表。
list(APPEND FLAGS "-D option1")
list(APPEND FLAGS "-D option2")
list(APPEND FLAGS "-D option3")
list(JOIN FLAGS " " FLAGS)
message(STATUS "FLAGS: " ${FLAGS})
Run Code Online (Sandbox Code Playgroud)
如果你只想处理一个字符串值,请参阅@ nonexplosive的答案.
但是,如果您希望在您的Cmake变量中CMakeLists.txt设置该变量并将其设置为某个值,请使用:[ string()] for 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}")
Run Code Online (Sandbox Code Playgroud)
完整标准:
-- DEBUG: x=hellogoodbye
-- DEBUG: y=hellogoodbye
-- Configuring done
-- Generating done
-- Build files have been written to: /home/_______/testing/_______
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33229 次 |
| 最近记录: |