如何在执行make编译时自动触发CMake的install步骤?
CMake自动执行install的配置方法
解决思路
要实现cmake ..; make -j8一次完成编译+安装,关键是让CMake生成的Makefile默认目标(all)关联install目标,确保编译完成后自动触发安装流程。
可行配置方案
方案1:新增自动安装目标(推荐)
在CMakeLists.txt中添加以下代码:
add_custom_target( auto_install ALL COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target install DEPENDS ${PROJECT_NAME} COMMENT "Running install after build..." )
ALL:将该目标加入默认构建流程,执行make时自动触发DEPENDS ${PROJECT_NAME}:确保主项目编译完成后再执行安装- 用
${CMAKE_COMMAND} --build调用install,兼容不同构建工具(比直接用make install更通用)
方案2:直接让默认目标依赖install
如果不想新增目标,可直接给默认的all目标添加依赖:
add_dependencies(all install)
注:CMake 3.23.1版本支持此写法,无需额外声明all目标。
之前尝试失败的原因
- 第一个写法
add_custom_target(default ...):CMake默认目标是all而非default,未指定CMAKE_DEFAULT_TARGET的话,这个自定义目标不会被默认执行 - 第二个写法
POST_BUILD命令:仅针对单个目标完成后执行,而install需要依赖所有构建产物,可能因依赖未完全就绪导致失败,且不符合CMake目标依赖的设计逻辑
验证
执行cmake ..生成Makefile后,运行make -j8,即可看到编译完成后自动执行install,同时生成project-targets.cmake文件。
内容的提问来源于stack exchange,提问作者Benjamin Johnson
相关产品推荐
相关产品推荐

