繁体   English   中英

在 CMake 中从变量中剥离路径

[英]Strip path off of variable in CMake

有没有办法从我的 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 中编写多个单独的复制语句

函数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

$<TARGET_FILE_DIR:${EXECUTABLE_NAME}>/../

从 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命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM