2011-12-26 20 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前的目标。