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

时间:2015-06-30 21:35:50

标签: c++ cmake 32bit-64bit

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

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

  1. 一个选项(-DUSE32bit = true)
  2. 工具链(-DCMAKE_TOOLCHAIN_FILE = 64bit.toolchain)
  3. 构建类型(-DCMAKE_BUILD_TYPE = release32)
  4. 在我的情况下,强制32位版本将是默认版本并且应该易于使用。强制64位构建对某些情况也很有用,并且不应该太难。使用主机系统的位宽对我的情况很少有意义,我不想支持它。

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

4 个答案:

答案 0 :(得分:12)

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

  

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

cmake . -DCMAKE_GENERATOR_PLATFORM=x64

答案 1 :(得分:5)

TL; DR

使用工具链

深度

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

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

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

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

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

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

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变量添加到工具链文件中。

答案 2 :(得分:1)

感谢您的所有投入,但在我这边,我最终选择了 -m32 hack with cmake

=ROUND((Manual_Input!$F$17/1000),1)

答案 3 :(得分:0)

我个人想在同一解决方案中切换到32/64位项目,以用于Visual Studio / cmake配置。我已经知道可以使用

完成此操作
set_target_properties(${project} PROPERTIES LINK_FLAGS ${PROJ_LINK_FLAGS})

其中PROJ_LINK_FLAGS可以是/MACHINE:X86/MACHINE:X64,具体取决于编译情况。