2011-07-14 108 views
3

我有如下所示構建腳本片段:CMake的:自定義命令後執行文件副本運行

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(...) 

複製的文件也不會產生,直到執行自定義的COMAND,但CMake的嘗試在第一次通過腳本時複製文件。我歡迎任何建議來解決這個問題,而不會劇烈地改變我的腳本。

回答

5

不要使用file(COPY...)功能,但添加下面的命令即可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會告訴你。一個可用的便攜式命令列表

+0

爲了保持src完全清潔,我必須從構建目錄中包含'#include'文件,這對我來說看起來並不高雅。我的系統的一部分 –

+0

i s $ {CMAKE_COMMAND}一個常量標識符?如果是的話,你是否參考了它的文檔? –

+0

我選擇了你的方法,KISS,謝謝你對我的感覺:D –

相關問題