簡體   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