簡體   English   中英

CMAKE:在自定義命令運行后執行文件復制

[英]CMAKE: performing a file copy AFTER a custom command has run

我有一個如下所示的構建腳本片段:

foreach(...)
...
  add_custom_command( OUTPUT ${fn_c} ${fn_s} ${fn_p_c} {fn_p_h}
                      COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} --proto_path=${CMAKE_CURRENT_SOURCE_DIR}  ${CMAKE_CURRENT_SOURCE_DIR}/${proto_var} --cpp_out=. --plugin=protoc-gen-RBLRPC=${CMAKE_BINARY_DIR}/tools/protoc-gen-RBLRPC --RBLRPC_out=. 
                      DEPENDS ${proto_var}
  )

  if(${M_S_} OR ${M_C_})
    set(MARSHALL_RPC_FILES ${MARSHALL_RPC_FILES} ${fn_p_c})
    message(status "copy marshall -------------------")
    file(COPY ${CMAKE_CURRENT_BINARY_DIR}/${fn_c} 
              ${CMAKE_CURRENT_BINARY_DIR}/${fn_s} 
              ${CMAKE_CURRENT_BINARY_DIR}/${fn_p_h} DESTINATION ${CMAKE_SOURCE_DIR}/include/rpc/marshall)
  endif()
...
endforeach(...)

在執行自定義命令之前不會生成復制的文件,但是 cmake 會在第一次通過腳本時嘗試復制文件。 我歡迎任何解決這個問題的建議,而不會徹底改變我的腳本。

不要使用file(COPY...) function,而是將以下命令添加到您的add_custom_command

COMMAND ${CMAKE_COMMAND} copy ${CMAKE_CURRENT_BINARY_DIR}/${fn_c}
        ${CMAKE_SOURCE_DIR}/include/rpc/marshall

但是對於你要做的事情,我建議你保持你的源代碼樹干凈,直接添加使用構建目錄中生成的文件。 例如,如果您想從一個源代碼樹創建兩個不同的構建樹,那將會中斷。

編輯:

CMAKE_COMMAND 記錄在聯機手冊頁文檔的變量部分中(搜索 CMAKE_COMMAND 而不是 ${CMAKE_COMMAND}。

在命令行CMAKE -E將顯示可用的便攜式命令列表。

暫無
暫無

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

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