2014-02-18 94 views
2

我正在尋找一種在包裝完成後執行代碼的方法。Cmake:後包裝步驟

我試圖添加一個自定義目標,這取決於生成的PACKAGE目標。 這看起來像它不工作,這裏的cmake的錯誤:

CMake Error: The inter-target dependency graph contains the following strongly connected  component (cycle): 
"ALL_BUILD" of type UTILITY 
depends on "UPLOAD" (strong) 
"PACKAGE" of type GLOBAL_TARGET 
depends on "ALL_BUILD" (strong) 
"UPLOAD" of type UTILITY 
depends on "PACKAGE" (strong) 
At least one of these targets is not a STATIC_LIBRARY. Cyclic dependencies are allowed only among static libraries. 

要做到這一點我用下面的代碼:

add_custom_target(UPLOAD ALL 
    COMMAND cmake -E echo "Should be post packging!" 
) 
add_dependencies(UPLOAD PACKAGE) 

是否有某種方式有目標上傳打包的文件?

回答

3

創建您自己的包目標。

add_custom_target(mypackage 
    COMMAND ${CMAKE_CPACK_COMMAND} 
    COMMAND ${CMAKE_COMMAND} -E echo "after packaging" 
) 
+0

在這種情況下,我必須配置CPack而不使用cmake?或者是否有一種方法來配置cmake與cmake,而不包括整個cpackConfig(使用由cmake包括(cpack)生成的一個。 否則,從cmake包括cpack,我可以在子命令中動態生成CPACK_PACKAGE_FILE_NAME var。 –

+0

我不明白這個問題,你是否嘗試過我發佈的內容? – steveire

+0

是的,我做了。它輸出沒有指定生成器,這意味着沒有找到「CPackConfig.cmake」文件,我已經猜到了,它是包裝的配置文件(我從cmake中刪除了include(cpack),清理並重建)。事實是,我正在從cmake配置CPackConfig文件,其中一些變量並不是一成不變的,就像在包中複製的文件一樣(dll,so,configuration等等) 當重用舊的CPackConfig文件,但它確實工作,但是隻在發佈時沒有進行調試,並且在我拿到文件的那一刻,我也只會設置文件。 –