我在C ++中有一个庞大的项目,我使用cmake生成.proj文件。
使用支持VS2017 proj文件生成的CMake版本3.12.2。
因此,对于Windows 64位编译,我使用以下生成器
CMAKE_GENERATOR="Visual Studio 15 2017 Win64"
这会在构建时创建一个.proj文件,并用于编译。
但是从构建日志中,我发现Visual Studio编译器cl.exe是从交叉编译位置获取的
C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.15.26726/bin/Hostx86/x64/cl.exe
/Hostx86/x64/cl.exe正在使用。
但是我希望它严格使用x64编译器来构建。从/Hostx64/x64/cl.exe
我从其他问题中读到,有人提到在.proj文件中添加一些标签以强制使用x64编译器。
但是我该如何使用cmake文件呢?
除了上面的cmake生成器提示之外,我没有找到任何关于这方面的参考。
任何人都可以帮助我如何使用cmake严格使VS使用x64编译器吗?
注意:我希望它使用x64编译器构建,因为我要链接到也用
编译的boost库。address-model=64 architecture=x86
在编译主项目时,我遇到了平台相关的错误。
fatal error LNK1112: module machine type 'x86' conflicts with target machine type 'x64'
这就是为什么我想用x64编译器编译主项目。
而且,Hostx86 / x64 / cl.exe和Hostsx64 / x64 / cl.exe有什么区别?
答案 0 :(得分:2)
这是一个常见的“问题”。默认情况下,CMake将选择32位编译器,通常很好,除了LLVM之类的项目。
使用-T host=x64
(请参阅https://cmake.org/cmake/help/v3.11/generator/Visual%20Studio%2015%202017.html)来使用本机64位编译器。
请注意,路径中的最后一个条目是目标平台,而不是主机平台,因此32位和64位编译器都将生成64位代码。
答案 1 :(得分:0)
我遇到了与OP中所述相同的问题。
我认为在Microsoft Windows操作系统上设置构建系统,编译器,体系结构,工具集和Windows SDK的显式(我认为是建议的)方法是使用以下CMake命令行参数:
-G "Visual Studio 15 2017"
-A x64
-T v141,host=x64,version=14.12.25827
-DCMAKE_CXX_COMPILER:FILEPATH=cl
-DCMAKE_C_COMPILER:FILEPATH=cl
-DCMAKE_SYSTEM_VERSION:STRING=10.0.16299.0
这将在我的系统上对编译器可执行文件进行如下设置:
%PROGRAMFILES(X86)%\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.12.25827\bin\
主机x64 \
x64 \cl.exe
-A x64
参数在上面的文件路径中设置斜体,而,host=x64
参数的-T
部分设置粗体。
明确设置工具集(主要版本(v141
)和次要版本,version=14.12.25827
也是一个好主意。
根据官方CMake文档,"Visual Studio 15 2017 Win64"
生成器仅用于与3.1之前的CMake版本兼容。我建议一般不再使用"[...] Win64"
生成器。
来源: