我想提供一种方法,始终将我的目标构建为32位或始终为64位可执行文件,并且cmake独立于主机系统(为gcc添加“-m32”或“-m64”标志,不确定然而,如何为其他编译器做什么)。
我可以想到三种方法,我应该使用哪种方法?
在我的情况下,强制32位构建将是默认的,应该易于使用。强制64位构建对某些情况也很有用,并且不应该太难。使用主机系统的位宽对我的情况很少有意义,我不想支持它。
我在这里找到了一个相关的问题(The proper way of forcing a 32-bit compile using CMake),但答案主要是讨论它是如何完成的,而不是如何最好地使它可配置。
使用工具链
- 一个选项(-DUSE32bit = true)
我想这不可扩展。那么如果你想建立N个项目呢?您必须添加N个选项。
- 构建类型(-DCMAKE_BUILD_TYPE = release32)
这可能效果很好。但在我看来,你正在混合不相关的东西。此外,我确信你必须通过设置一些find_package
CMake变量来适应*_ROOT
行为。使用CMAKE_BUILD_TYPE
是不可能的(至少,再次以可扩展的方式)。
- 工具链(-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变量添加到工具链文件中。
对于Visual Studio和每个https://cmake.org/cmake/help/latest/variable/CMAKE_GENERATOR_PLATFORM.html
对于VS 2005及更高版本的Visual Studio生成器,它指定了目标体系结构。
cmake . -DCMAKE_GENERATOR_PLATFORM=x64