【问题标题】:Environment variable used by CMake to detect Visual C++ compiler tools for NinjaCMake 用于检测 Ninja 的 Visual C++ 编译器工具的环境变量
【发布时间】:2017-03-28 12:30:28
【问题描述】:

我有来自 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。

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

【问题讨论】:

    标签: cmake ninja


    【解决方案1】:

    您还可以使用倒置方法并使用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
    ...
    

    【讨论】:

      【解决方案2】:

      使用工具链文件

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-08
        • 1970-01-01
        • 1970-01-01
        • 2015-10-15
        相关资源
        最近更新 更多