在CMake中剥离变量的路径

Syn*_*ose 3 cmake

有没有办法可以在我的CMakeLists.txt中删除变量的路径?说我有一个变量

RUNTIME_DEPENDENCIES = {
    src/frontend/solve.py
    src/frontend/other.py
}
Run Code Online (Sandbox Code Playgroud)

这些运行时依赖项被复制到bin,以便在执行期间使用可执行文件,但是按照我复制它们的方式,它们出现在各自的文件夹中.所以我的构建文件夹看起来像

    build
      | \
     src executable
      |
   frontend
   /       \
other.py  solve.py
Run Code Online (Sandbox Code Playgroud)

我想要简单地包含文件夹

           build
    /       /         \
executable  other.py  solve.py
Run Code Online (Sandbox Code Playgroud)

这是使用的实际复制命令:

#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()
Run Code Online (Sandbox Code Playgroud)

我意识到我可以简单地将上面的第5行更改为

${CMAKE_SOURCE_DIR}/src/frontend/${RUNTIME_DEPENDENCY}
Run Code Online (Sandbox Code Playgroud)

但是在我有多个依赖关系的情况下,我src/frontend不想在我的CMakeLists.txt中编写多个单独的复制语句

Pet*_*ter 10

该功能get_filename_component执行此操作:

get_filename_component(barename ${RUNTIME_DEPENDENCY} NAME)
Run Code Online (Sandbox Code Playgroud)

barename是保存文件名并删除路径的输出变量.例如:

get_filename_component(barename "src/frontend/solve.py" NAME)
message(STATUS ${barename})
Run Code Online (Sandbox Code Playgroud)

会打印 solve.py