如何在CMake构建项目时用make命令调用Ninja执行构建?
用CMake生成兼容Make命令的Ninja代理Makefile
直接通过CMake生成一个代理Makefile,就能让你输入make时自动调用Ninja执行构建,包括make tests这类特定目标的转发,彻底解决Shell别名方案的痛点。
实现步骤:
- 创建Makefile模板
在项目根目录新建Makefile.in文件,内容如下:
# 先检查Ninja是否在系统PATH中 ifeq (, $(shell which ninja)) $(error "Ninja未安装或未加入系统PATH") endif # 转发所有make命令到Ninja %: @ninja $@ # 默认目标对应ninja的默认构建 .DEFAULT_GOAL := all
- 在CMakeLists.txt中添加生成逻辑
在项目的主CMakeLists.txt合适位置加入以下配置,让CMake构建时自动生成代理Makefile:
# 生成代理Makefile,将make命令转发给Ninja configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.in ${CMAKE_CURRENT_BINARY_DIR}/Makefile @ONLY )
使用方式:
正常用CMake生成Ninja构建文件即可:
mkdir build && cd build cmake -G Ninja ..
之后在build目录下,输入make就会自动执行ninja,输入make tests则对应ninja tests,完全兼容你习惯的Make命令格式。
方案优势:
- 无需手动配置Shell别名或环境变量,每个项目独立配置,克隆后直接构建即可
- 统一历史项目的构建命令,不管项目原本用什么构建系统,只要用这套配置就能用
make调用Ninja - 自带Ninja存在性检查,避免因环境问题导致的构建失败
内容的提问来源于stack exchange,提问作者Henrique Bucher
相关产品推荐
相关产品推荐

