簡體   English   中英

CMake post-build-event:復制編譯庫

[英]CMake post-build-event: copy compiled libraries

我項目的二進制目錄結構目前是這樣的(Windows):

bin/mainProject/{Debug,Release}
bin/library1/{Debug,Release}
bin/library2/{Debug,Release}
...
bin/libraryN/{Debug,Release}

我想給庫復制library1lib.dll ,... libraryNlib.dllbin/mainProject/{Debug,Release}目錄,一旦他們積累。

對於CMake,我認為使用后期構建事件是可行的,因此我嘗試將其添加到每個庫的CMakeLists.txt

add_custom_command(TARGET library1 POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy
        ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/library1lib.dll
        ${CMAKE_BINARY_DIR}/mainProject/${CMAKE_BUILD_TYPE}/
)

目前,有兩個問題:

  1. 似乎沒有定義${CMAKE_BUILD_TYPE} ,至少我在輸出窗口中得到該變量的空字符串。
  2. 是否有可能使后期構建事件更通用? 比如用一些變量替換實際的dll名稱?

您可以使用生成器表達式使其更通用:

add_custom_command(
    TARGET library1 
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy
        $<TARGET_FILE:library1>
        $<TARGET_FILE_DIR:mainProject>/$<TARGET_FILE_NAME:library1>
)

替代

您可以 - 如果每個依賴項都在您的CMake項目中構建 - 也只需為所有可執行文件和DLL提供一個公共輸出路徑,例如:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Out")

注意:此處需要絕對路徑,因為否則它將相對於每個目標的默認輸出路徑。 請注意,配置的子目錄由CMake自動附加。

參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM