如何让CMake自定义目标依赖all或install目标?
解决CMake中behave测试目标依赖install步骤的问题
你直接尝试让behave目标依赖install会报错,原因是**install是CMake生成的伪目标(phony target),并非CMake管理的真实构建目标**,无法通过DEPENDS或add_dependencies()直接关联。
正确实现方式
通过创建一个封装install操作的自定义目标,让behave依赖这个目标即可:
# 自定义目标:执行install步骤 add_custom_target(run_install COMMAND "${CMAKE_COMMAND}" --install "${CMAKE_BINARY_DIR}" COMMENT "Executing install step before running behave tests..." ) # 定义behave测试目标,依赖run_install add_custom_target(behave COMMAND behave WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} DEPENDS run_install )
原理说明
cmake --install "${CMAKE_BINARY_DIR}"是CMake官方推荐的跨平台执行install步骤的命令,等价于直接运行make install(Makefile生成器下)或ninja install(Ninja生成器下)。- 通过
run_install这个真实的自定义目标,将install步骤封装为可被依赖的对象,解决了伪目标无法被CMake目标依赖的问题。
你之前的错误配置及报错信息
错误配置:
add_custom_target(behave behave WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} DEPENDS install ) # 也曾尝试: # add_dependencies(behave install)
执行make behave时的报错:
$ make behave ... make[2]: *** No rule to make target 'CMakeFiles/install.dir/all', needed by 'CMakeFiles/behave.dir/all'. Stop. ...
内容的提问来源于stack exchange,提问作者John Graham
相关产品推荐
相关产品推荐

