【问题标题】:VS 2017 builds x64 project with cross compilerVS 2017 使用交叉编译器构建 x64 项目
【发布时间】:2018-10-15 09:58:33
【问题描述】:

我有一个巨大的 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 文件中添加一些标签以强制 vs 使用 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 有什么区别?

【问题讨论】:

  • 您误解了“主机 x86,目标 x64”编译器的性质。它肯定会创建 x64 模块,而不是 x86 模块。我怀疑链接器错误是由于将 x86 和 x64 输出放在同一目录中造成的。

标签: c++ visual-studio boost cmake


【解决方案1】:

这是一个常见的“问题”。默认情况下,CMake 会选择 32 位编译器,这通常没问题,除了 LLVM 之类的项目。

使用-T host=x64(参见https://cmake.org/cmake/help/v3.11/generator/Visual%20Studio%2015%202017.html)来使用本机64位编译器。

请注意,路径中的最后一项是目标平台,而不是主机平台,因此 32 位和 64 位编译器都会生成 64 位代码。

【讨论】:

  • 所以它会像 CMAKE_GENERATOR="Visual Studio 15 2017 Win64" -T host=x64 ??没有例子,他们在说什么很令人困惑。
  • 我想是的,是的。通常我在 Windows 上使用 GUI,只有一个地方可以放置这个选项。
  • 我在脚本中添加了以下值。 CMAKE_GENERATOR_PLATFORM="Visual Studio 15 2017 Win64" CMAKE_GENERATOR_TOOLSET="v141_xp host=x64" CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE=x64 但是使用的编译器仍然是 C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.15 .26726\bin\HostX86\x64\CL.exe
  • 你是从头开始(空的构建文件夹)吗?
  • 在 cmake 命令中添加 -Thost=x64 而不是设置标志有效。谢谢@matthieu
【解决方案2】:

我遇到了与 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\Hostx64\x64\cl.exe

-A x64 参数设置上面文件路径中的斜体部分,-T 参数的,host=x64 部分设置粗体部分。

明确设置工具集也是一个好主意,主要版本 (v141) 和次要版本 ,version=14.12.25827

根据官方 CMake 文档,"Visual Studio 15 2017 Win64" 生成器仅用于与 3.1 之前的 CMake 版本兼容。我建议一般不要再使用"[...] Win64" 生成器。

来源:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多