CMAKE忽略有关指定编译器

时间:2018-03-28 10:11:18

标签: c++ cmake

在安装了VS2017和LLVM的Windows 10上

和CMAKE只将VC编译器作为默认值并忽略CMakeLists.txt和命令行set中的-DCMAKE_CXX_COMPILER命令

我不知道如何使用LLVM Clang

我检查了许多现有问题,但它们对我不起作用

的CMakeLists.txt

cmake_minimum_required(VERSION 3.11)
set(CMAKE_CXX_COMPILER "C:\\Program Files\\LLVM\\bin\\Clang++")
project(CMakeTest1 VERSION 0.0.0 LANGUAGES CXX)
aux_source_directory(. MAINDIR)
add_executable(CMakeTest1 ${MAINDIR})

的main.cpp

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    return 0;
}

使用git bash运行命令

***@DESKTOP-8KJ4J0H MINGW64 /d/CMakeTest1
$ cmake -DCMAKE_CXX_COMPILER="C:\Program Files\LLVM\bin\Clang++" .
-- Building for: Visual Studio 15 2017
-- The CXX compiler identification is MSVC 19.13.26129.0
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.13.26128/bin/Hostx86/x86/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.13.26128/bin/Hostx86/x86/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: D:/CMakeTest1

我的CXX编译器标识被强制为MSVC,并且不能通过任何方法进行更改。

不明白为什么

EDITED: 我想强烈声明的是,我发誓并且清楚地知道我清理了所有生成的文件形成文件夹,并且只有CMakeLists.txt和main.cpp存在。并且我不想让旧缓存文件未被删除

2 个答案:

答案 0 :(得分:0)

这可能是由于Windows中CMake的默认generator造成的。

-- Building for: Visual Studio 15 2017
...

您可以通过在命令行中添加-G <generator name>来更改生成器。在您的情况下,我认为-G 'MSYS Makefiles'可能有用。

答案 1 :(得分:0)

这是因为CMAKE_CXX_COMPILER是从您的生成器推断出来的(Windows上默认使用最新的 Visual Studio ),因此它是cl.exe

要切换到clang,您应该使用其他发电机,例如NinjaUnix Makefiles

如果您想将VS与clang-cl.exe一起使用,则需要通过添加标记-TLLVM-vs2014将平台工具集设置为适当的版本。

有关详细信息,请参阅this instructions