CMake使用的环境变量来检测Ninja的Visual C++编译器工具

3
我有Mingw64 GCC 6.3.0(始终在PATH中)和来自Visual Studio 2017 RTM的Visual C++编译器工具(不在PATH中)。
如果我运行"cmake . -G "MinGW Makefiles"", 将会选择GCC 6.3.0。
如果我运行"cmake . -G "Ninja"", 将会选择GCC 6.3.0。
我的Visual C++编译器工具是非标准的,我只保留我需要的部分并删除其余部分(如MSBuild、IDE等)。我使用自己的批处理脚本来设置PATH、INCLUDE和LIB(完全正常)。
如果我运行这个批处理脚本并运行"cmake .", MSVC将被选择并使用NMake构建。
在相同的环境下,如果我运行"cmake . -G "Ninja"", 会选择GCC 6.3.0而不是MSVC。
所以我的问题是,当两者都在PATH中时,如何告诉CMake我想要使用MSVC+Ninja而不是GCC+Ninja?我应该设置哪些环境变量?
2个回答

6
您也可以采用反向方法,使用CMAKE_IGNORE_PATH来排除您不想要的所有编译器。它需要一个要忽略的路径列表,但请注意它需要精确的字符串匹配。优点是您可以直接从命令行声明这些内容。
所以我做的是将找到但“不可取”的编译器路径放入CMAKE_IGNORE_PATH中。
在我的系统上实际上有三个GCC编译器在我的PATH中(每次尝试时请确保从空的二进制输出目录开始)。
> cmake -G"Ninja" ..
...
-- Check for working C compiler: C:/MinGW/bin/cc.exe
...

> cmake -DCMAKE_IGNORE_PATH="C:/MinGW/bin" -G"Ninja" ..
...
-- Check for working C compiler: C:/Strawberry/c/bin/gcc.exe
...

> cmake -DCMAKE_IGNORE_PATH="C:/MinGW/bin;C:/Strawberry/c/bin" -G"Ninja" ..
...
-- Check for working C compiler: C:/Program Files (x86)/LLVM/bin/clang.exe
...

> cmake -DCMAKE_IGNORE_PATH="C:/MinGW/bin;C:/Strawberry/c/bin;C:/Program Files (x86)/LLVM/bin" -G"Ninja" ..
...
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe
...

4

使用工具链文件

set(CMAKE_C_COMPILER cl.exe)
set(CMAKE_CXX_COMPILER cl.exe)

然后使用-DCMAKE_TOOLCHAIN_FILE=toolchainfile选项构建您的CMake项目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接