Cygwin环境下如何强制Conan+CMake使用Ninja构建工具?
我在装有python、cmake和Ninja的Cygwin环境中,通过pip安装了Conan。当构建仅包含bzip2/1.0.8依赖的conanfile.txt时,出现如下错误:
CMake Error: Could not create named generator MinGW Makefiles
由于特定原因必须避免使用MinGW,我尝试设置CONAN_CMAKE_GENERATOR=Ninja但没有效果,现在需要找到强制Conan+CMake使用Ninja的方法。完整错误日志显示,Conan在构建bzip2时依然调用了cmake -G "MinGW Makefiles"。
1. 使用构建配置文件指定生成器
创建一个构建配置文件(比如命名为build-cygwin-ninja),内容如下:
[settings] os=Windows arch=x86_64 compiler=clang compiler.version=14 compiler.libcxx=libc++ [conf] tools.cmake.cmaketoolchain:generator=Ninja
然后在安装命令中指定该构建配置文件:
conan install -pr clang . --build=bzip2 -pr:b=build-cygwin-ninja
-pr:b参数用于指定构建阶段的配置,确保依赖包(如bzip2)在构建时使用Ninja生成器。
2. 命令行直接指定构建阶段的环境变量
之前设置的CONAN_CMAKE_GENERATOR仅作用于用户项目的host上下文,需要明确指定该变量作用于build上下文:
conan install -pr clang . --build=bzip2 --env:build CONAN_CMAKE_GENERATOR=Ninja
--env:build会将环境变量传递给依赖包的构建过程,强制CMake使用Ninja。
3. 全局配置默认CMake生成器
如果需要长期生效,可以修改Conan全局配置,设置默认的CMake生成器为Ninja:
conan config set tools.cmake.cmaketoolchain:generator=Ninja
该配置会对所有使用CMake工具链的构建生效,无需每次命令行指定。
CONAN_CMAKE_GENERATOR环境变量默认仅影响host上下文(即你自己的项目),而依赖包的构建属于build上下文,因此需要通过构建配置文件、--env:build参数或全局配置来覆盖build阶段的生成器设置。
内容的提问来源于stack exchange,提问作者v.v

