如何在CMake中实现以下功能(使用版本2.8.5)?我有一个由名为doc
的自定义目标生成的文档,我希望在安装或CPacking时将其输出。如何告诉CMake安装目录取决于伪目标?
add_custom_target(doc "${DOXYGEN_EXECUTABLE}" Doxyfile)
install(DIRECTORY ${CMAKE_BINARY_DIR}/doc DESTINATION doc)
的Doxyfile
告诉Doxygen的放出来的文档在${CMAKE_BINARY_DIR}/doc
。
如果我做这个build目录:
make doc
cpack
东西正常工作,因为第一行创建在其上install
目标所依赖的目录。
但是,如果我有一个新的版本(所以${CMAKE_BINARY_DIR}/doc
还不存在),我直接调用CPack:
cpack
那么它抱怨找不到${CMAKE_BINARY_DIR}/doc
:
CMake Error at <snip>/build/cmake_install.cmake:36 (FILE):
file INSTALL cannot find "<snip>/build/doc".
我也试过以下内容:
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/doc COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile)
install(DIRECTORY ${CMAKE_BINARY_DIR}/doc DESTINATION doc)
但我仍然得到相同的CPack错误,并且在构建目录中执行make doc
也不起作用。
所以,如果我做make doc
前cpack
手动将其与配置工作在这个岗位上,但我怎么能告诉cmake的/ cpack的install
指令依赖于自定义的目标doc
,使建筑的文档发生自动拨打电话cpack
或make install
?
谢谢!
谢谢,这确实是一个可能的解决方案。但是,'ALL'关键字始终会导致目标被建立。在这种情况下,这不是问题,但我仍然对通用解决方案感兴趣,我可以在安装目标(隐含地取决于'ALL')和我的自定义目标之间添加显式依赖关系。 –
@ysnikraz我已经更新了我的答案。不幸的是,cmake没有明确的方式来设置定制和内置目标之间的依赖关系。 –
非常感谢您的更新和解决方法!只是测试它,它运作良好。正是我在找什么! –