2011-12-26 19 views
6

我已經在我的項目是這樣的:推遲使得自定義的目標,直到安裝

add_custom_command(OUTPUT somefile) 
add_custom_target(tgt ALL DEPENDS somefile) 

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/somefile DESTINATION somedir) 

這工作不錯,但我的命令時,因爲ALL關鍵字make在add_custom_target()中運行。我想要的是讓CMake只在發佈make install時運行此命令,而不是在構建過程中。

如果我刪除所有關鍵字,整個目標不是默認生成的,所以somefile不會生成,並且make install失敗。

回答

8

一個可能的解決方案是讓make install命令調用make tgt作爲副作用。這可以通過使用install命令的CODE簽名來完成:

add_custom_command(OUTPUT somefile) 
add_custom_target(tgt DEPENDS somefile) 

install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND}\" --build \"${CMAKE_CURRENT_BINARY_DIR}\" --target tgt)") 
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/somefile DESTINATION somedir) 

execute_process調用cmake的建設安裝somefiletgt前的目標。