You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 06:23:16