问题 如何在Windows下使用cmake生成使用英特尔编译器的Visual Studio项目


我正在用C开发一个跨平台(Linux / Windows)应用程序。我已经厌倦了维护一个可用的Makefile和Visual Studio解决方案/项目,所以我想转换到cmake。我在两个平台上都使用英特尔编译器。

我已经在Windows上下载了cmake 3.0,在Linux上下载了cmake 2.8(它是ubuntu 12.04存储库中的一个)。在Linux上,一切顺利,Makefile成功生成。这是一个简单的运行问题: CC=icc CXX=icc cmake ..

但是,在Windows上,无论我尝试什么命令,我都无法使用英特尔编译器。输出vcxproj始终使用MSVC编译器。

我尝试过以下命令:

cmake -G "Visual Studio 11 2012 Win64" -D CMAKE_C_COMPILER="C:/Program Files (x86)/Intel/Composer XE/bin/intel64/icl.exe" -D CMAKE_CXX_COMPILER="C:/Program Files (x86)/Intel/Composer XE/bin/intel64/icl.exe" ..

输出是:

-- The C compiler identification is MSVC 17.0.61030.0
-- The CXX compiler identification is MSVC 17.0.61030.0
-- Check for working C compiler using: Visual Studio 11 2012 Win64
-- Check for working C compiler using: Visual Studio 11 2012 Win64 -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler using: Visual Studio 11 2012 Win64
-- Check for working CXX compiler using: Visual Studio 11 2012 Win64 -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done

当我将生成器更改为“NMake Makefiles”时,icc被设置为编译器。

-- The C compiler identification is Intel 14.0.3.20140422
-- The CXX compiler identification is Intel 14.0.3.20140422
-- Check for working C compiler: C:/Program Files (x86)/Intel/Composer XE/bin/intel64/icl.exe

我在一个只有一个源文件的基本项目上测试它,所以我的CMakeLists.txt文件只包含:

project(dummy_cmake)

add_executable(hellonikola main.c)

任何帮助是极大的赞赏!

附:

cmake-gui表现一样。我选择指定一个不同的本机编译器并给出icc的路径并获得上述输出。

我也试过在Windows上使用cmake 2.8,行为是一样的。


5479
2017-12-23 15:14


起源

当使用生成器作为“NMake Makefiles”时,我遇到了和你一样的问题。但是你的解决方案在我的情况下不起作用。 - tejas


答案:


我找到了答案,所以我发布它以防其他人有同样的问题。

解决方案是将此行添加到 CMakeLists.txt

set(CMAKE_GENERATOR_TOOLSET "Intel C++ Compiler XE 14.0" CACHE STRING "Platform Toolset" FORCE)

我发现了这个 在这个博客上 并使其适应使用英特尔编译器。


9
2017-12-26 17:31



您可以在命令行上使用相同的字符串:cmake -T“Intel C ++ Compiler XE 14.0”... - Avi Tevet
注:该 文档 毫不含糊地说“这个变量的价值永远不应该被项目代码修改。” - imallett
对于当前版本的工具集名称是“Intel C ++ Compiler 16.0” - Dženan