我是否可以在CMakeLists.txt中删除变量的路径?假设我有一个变量
RUNTIME_DEPENDENCIES = {
src/frontend/solve.py
src/frontend/other.py
}
这些运行时依赖项被复制到bin,以便在执行期间使用可执行文件,但是按照我复制它们的方式,它们出现在各自的文件夹中。所以我的构建文件夹看起来像
build
| \
src executable
|
frontend
/ \
other.py solve.py
我想要的文件夹只包含
build
/ / \
executable other.py solve.py
这是使用的实际复制命令:
#copy runtime deps
add_custom_target(copy_runtime_dependencies ALL)
foreach(RUNTIME_DEPENDENCY ${RUNTIME_DEPENDENCIES})
add_custom_command(TARGET copy_runtime_dependencies POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_SOURCE_DIR}/${RUNTIME_DEPENDENCY}
$<TARGET_FILE_DIR:${EXECUTABLE_NAME}>/${RUNTIME_DEPENDENCY})
endforeach()
我意识到我可以简单地将上面的第5行更改为
${CMAKE_SOURCE_DIR}/src/frontend/${RUNTIME_DEPENDENCY}
但是如果我在src/frontend
之外有多个依赖项,我不想在我的CMakeLists.txt中编写多个单独的复制语句
答案 0 :(得分:8)
函数get_filename_component
执行此操作:
get_filename_component(barename ${RUNTIME_DEPENDENCY} NAME)
barename
是保存文件名并删除路径的输出变量。例如:
get_filename_component(barename "src/frontend/solve.py" NAME)
message(STATUS ${barename})
会打印solve.py
答案 1 :(得分:0)
$<TARGET_FILE_DIR:${EXECUTABLE_NAME}>/../
答案 2 :(得分:0)
从 CMake 3.20 开始,您可以使用新的 cmake_path
命令进行路径操作,以获取每个路径的 FILENAME
组件:
cmake_path(GET <path-var> FILENAME <out-var>)
例如,您可以这样做:
cmake_path(GET RUNTIME_DEPENDENCY FILENAME MY_FILE_NAME)
此命令取代 get_filename_component
命令。