簡體   English   中英

CMake自定義命令-即使不構建目標也僅在更改目標時才復制更改的文件?

[英]CMake custom command - copy changed file even if don't build target and only if it was changed?

我有一個帶有下一個post_build命令的CMake項目:

add_custom_command(TARGET ncd_json
                   POST_BUILD
                   COMMAND ${CMAKE_COMMAND} -E copy
                   ${CMAKE_CURRENT_SOURCE_DIR}/ncd.json
                   $<TARGET_FILE_DIR:ncd_json>/ncd.json
                   COMMENT "Copy ncd.json into binaries folder"
                   )

每次目標構建時都會復制ncd.json 但是, 即使更改了目標即使目標已經構建 ,我也確實需要復制此文件,這是主要問題。

我認為, 如果原始文件發生更改,則此問題不是CMake副本的完整副本,而是對其進行了補充。

類似於以下內容的內容應該可以滿足您的需求:

add_custom_target(copyJson ALL
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
            ${CMAKE_CURRENT_SOURCE_DIR}/ncd.json
            $<TARGET_FILE_DIR:ncd_json>/ncd.json
)
add_dependencies(copyJson ncd_json)

如果文件不相同,它將僅復制文件;如果目標已經構建,則仍將復制文件。 但是請注意,如果僅要求構建目標本身, 它將不會復制。 以上內容取決於您構建默認目標來獲取文件復制的情況。 您可以始終將問題中的方法與上述方法結合使用,對於您想要的情況,它可能會很可靠。

在寫問題時,我在這里找到了一個很好的答案

configure_file(input_file output_file COPYONLY)

還是我的情況

configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/ncd.json 
            ${CMAKE_CURRENT_BINARY_DIR}/ncd.json
            COPYONLY
            )

但是我仍然不確定是否每次都復制ncd.json ...

另請參閱文檔

暫無
暫無

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

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