VS 2017使用交叉编译器构建x64项目

时间:2018-10-15 09:58:34

标签: c++ visual-studio boost cmake

我在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有什么区别?

2 个答案:

答案 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"生成器。

来源: