使用cmake强制执行32位或64位构建的选项

问题描述 投票:14回答:2

我想提供一种方法,始终将我的目标构建为32位或始终为64位可执行文件,并且cmake独立于主机系统(为gcc添加“-m32”或“-m64”标志,不确定然而,如何为其他编译器做什么)。

我可以想到三种方法,我应该使用哪种方法?

  1. 一个选项(-DUSE32bit = true)
  2. 工具链(-DCMAKE_TOOLCHAIN_FILE = 64bit.toolchain)
  3. 构建类型(-DCMAKE_BUILD_TYPE = release32)

在我的情况下,强制32位构建将是默认的,应该易于使用。强制64位构建对某些情况也很有用,并且不应该太难。使用主机系统的位宽对我的情况很少有意义,我不想支持它。

我在这里找到了一个相关的问题(The proper way of forcing a 32-bit compile using CMake),但答案主要是讨论它是如何完成的,而不是如何最好地使它可配置。

c++ cmake 32bit-64bit
2个回答
5
投票

TL;DR

使用工具链

In depth

  1. 一个选项(-DUSE32bit = true)

我想这不可扩展。那么如果你想建立N个项目呢?您必须添加N个选项。

  1. 构建类型(-DCMAKE_BUILD_TYPE = release32)

这可能效果很好。但在我看来,你正在混合不相关的东西。此外,我确信你必须通过设置一些find_package CMake变量来适应*_ROOT行为。使用CMAKE_BUILD_TYPE是不可能的(至少,再次以可扩展的方式)。

  1. 工具链(-DCMAKE_TOOLCHAIN_FILE = 64bit.toolchain)

最好的变种。如果你想构建两个项目 - 只需使用相同的工具链:

cmake -Hproj-1 -B_builds/proj-1 -DCMAKE_TOOLCHAIN_FILE=/.../64bit.toolchain
cmake -Hproj-2 -B_builds/proj-2 -DCMAKE_TOOLCHAIN_FILE=/.../64bit.toolchain

如果你想用64位架构构建你的第三方ExternalProject_Add - 只需将工具链传递给CMAKE_ARGS:

ExternalProject_Add(
    ...
    CMAKE_ARGS ... -DCMAKE_TOOLCHAIN_FILE=/.../64bit.toolchain
    ...
)

想要适应find_package - 只需将任何CMake变量添加到工具链文件中。


12
投票

对于Visual Studio和每个https://cmake.org/cmake/help/latest/variable/CMAKE_GENERATOR_PLATFORM.html

对于VS 2005及更高版本的Visual Studio生成器,它指定了目标体系结构。

cmake . -DCMAKE_GENERATOR_PLATFORM=x64
© www.soinside.com 2019 - 2024. All rights reserved.