【问题标题】:CMake Multiarchitecture CompilationCMake 多架构编译
【发布时间】:2011-07-17 02:04:52
【问题描述】:

我想知道如何编写允许使用任何编译器和操作系统编译 x86 和 x64 架构的 CMake 设置。

【问题讨论】:

标签: architecture compilation cmake


【解决方案1】:

如果 CMake 有一个开箱即用的 32/64 位选项,那就太好了。它没有,因此您需要应用不同的编译器或生成器依赖方法之一。例如:

  • GCC(在 Linux 上)和其他一些编译器,例如太阳工作室。将CFLAGSCXXFLAGS 设置为包括-m32(32 位版本)或-m64(64 位版本)。

  • Windows、Visual Studio 生成器。使用 64 位生成器,例如

    cmake -G "Visual Studio 10 Win64" path\to\source\dir

    编译 64 位 (x64)。在生成器名称中省略“Win64”,为 32 位构建

  • Mac OS X。使用CMAKE_OSX_ARCHITECTURES CMake 变量。

    cmake -DCMAKE_OSX_ARCHITECTURES=i386 /path/to/source/dir 将编译 32 位版本

    cmake -DCMAKE_OSX_ARCHITECTURES=x86_64 /path/to/source/dir 将编译 64 位。

    cmake "-DCMAKE_OSX_ARCHITECTURES=x86_64;i386" /path/to/source/dir 将创建 96 位通用二进制文件 :)

以上内容略有改写。

http://dev.mysql.com/doc/internals/en/compiling-for-different-hardware-achitectures.html

2019 年 4 月更新

这是一个老答案,有些东西已经改变了,特别是对于 Windows 上的 VS 生成器。

安装了 cmake 3.14 和 Visual Studio 2019

cmake -G "Visual Studio 16 2019" -A x64 path\to\source\dir

编译 64 位 (x64)。您通常可以在 x64 机器上同时省略 -G 和 -A 参数(您在 2019 年使用的是 x64 操作系统,对吧?)

cmake -G "Visual Studio 16 2019" -A Win32 path\to\source\dir

编译32位。

【讨论】:

  • 这太棒了!但是对于Visual Studio,它不应该是-G,因为它是一个生成器吗?同样对于 Visual Studio,是否可以在 CMakeLists.txt 文件中设置某种标志来自动告诉它使用哪个(即请求您选择 i386 或 x86-64,并根据您的响应进行设置)?
  • 应该是-G,必须在命令行中传入生成器。您还可以使用基于 Qt 的图形界面 cmake-gui,并从下拉列表中选择合适的生成器。
  • @OniLink,@Marcus。是的,应该是 -G 。非常感谢您的关注!我现在修复了它(并且还修复了 MySQL Wiki 中的相同段落)。据我所知,在 CMakeLists.txt 中更改 Visual Studio 的位数是不可能的,这里的位数是生成器的属性,不能动态设置/更改生成器。
  • 借助 MSVC 工具链,您还可以在 cmake 文件中使用 set(CMAKE_EXE_LINKER_FLAGS "/machine:x86")(架构中的子目录)。
  • 在 Windows/MSVC 上,64 位和 32 位实际上是不同的编译器,不像 gcc,其中架构是您将传递给编译器的标志。猜猜这就是原因。
【解决方案2】:

如果 CMAKE_OSX_ARCHITECTURES=i386 给您错误“无法识别的选项 -arch”,请重新开始,然后尝试:

cmake -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_SYSTEM_PROCESSOR=i386 -DCMAKE_SYSTEM_VERSION=10

【讨论】:

    【解决方案3】:

    网上有一个CMake tutorial 来复习基础知识,这取自 CMake 书。 CMake 的理念是使用多个构建目录和一个源代码树。因此,您可以在 Windows 上使用 Visual Studio,并使用 32 位编译器创建一个构建目录,并使用 64 位编译器创建另一个。

    CMake 针对大量编译器和操作系统,但您没有提及您正在使用什么语言、您正在考虑什么操作系统/编译器/架构以及您是否使用任何工具包/库。

    【讨论】:

    • 答案与问题无关。
    猜你喜欢
    • 2023-02-25
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多