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

时间:2017-03-28 12:30:28

标签: cmake ninja

我有来自Visual Studio 2017 RTM的Mingw64 GCC 6.3.0(始终在PATH)和Visual C ++编译器工具(不在PATH中)。

如果我运行cmake . -G "MinGW Makefiles",将选择GCC 6.3.0。

如果我运行cmake . -G "Ninja",将选择GCC 6.3.0。

我的Visual C ++编译工具不是标准的,我只保留我需要的部分并删除其余部分(如MSBuild,IDE等)。我使用自己的批处理脚本设置PATHINCLUDELIB(效果很好)。

如果我运行此批处理脚本并运行cmake .,将选择MSVC并使用NMake进行构建。

在相同的环境cmake . -G "Ninja"下,选择GCC 6.3.0而不是MSVC。

所以我的问题是,如果告诉CMake我想使用MSVC + Ninja而不是GCC + Ninja,两者都在PATH?我应该设置的任何环境变量?

2 个答案:

答案 0 :(得分:6)

您还可以使用反转方法,并使用CMAKE_IGNORE_PATH排除所有不需要的编译器。它需要忽略的路径列表,但要注意它必须是精确的字符串匹配。优点是您可以直接从命令行声明它们。

所以我所做的就是从发现的编译器中取出路径,但“不要被带入”CMAKE_IGNORE_PATH

在我的系统上,我的PATH实际上有三个GCC编译器(只需确保从每个尝试的空二进制输出目录开始):

> 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
...

答案 1 :(得分:3)

使用工具链文件

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

然后用-DCMAKE_TOOLCHAIN_FILE = toolchainfile构建你的cmake项目