使用cmake强制32位或64位构建的选项
Option to force either 32-bit or 64-bit build with cmake
我想提供一种方法,始终将我的目标构建为32位或64位可执行文件,并使用独立于主机系统的cmake(为gcc添加"-m32"或"-m64"标志,还不确定该为其他编译器做些什么)。
我能想出三种方法来做这件事,我应该用哪一种?
- 一个选项(-DUSE32bit=true)
- 工具链(-DCMAKE_TOOLCHAIN_FILE=64bit.TOOLCHAIN)
- 生成类型(-DCMAKE_build_TYPE=release32)
在我的情况下,强制32位构建将是默认的,并且应该很容易使用。强制64位构建在某些情况下也很有用,应该不会太难。使用主机系统的位宽对我的情况来说几乎没有意义,我不想支持它
我在这里发现了一个相关的问题(使用CMake强制32位编译的正确方法),但答案主要是讨论如何完成,而不是如何最好地进行配置。
对于Visual Studio和https://cmake.org/cmake/help/latest/variable/CMAKE_GENERATOR_PLATFORM.html
对于带有VS 2005及更高版本的Visual Studio Generator,这将指定目标体系结构。
cmake . -DCMAKE_GENERATOR_PLATFORM=x64
TL;DR
使用工具链
深入
- 一个选项(-DUSE32bit=true)
我想这是不可扩展的。那么,如果你想构建N个项目呢?您必须添加N个选项。
- 生成类型(-DCMAKE_build_TYPE=release32)
这可能很有效。但在我看来,你把无关的东西混在一起了。此外,我确信您必须通过设置一些*_ROOT
CMake变量来调整find_package
的行为。使用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/cmake配置解决方案中切换到32/64位项目。我已经发现使用可以做到这一点
set_target_properties(${project} PROPERTIES LINK_FLAGS ${PROJ_LINK_FLAGS})
其中CCD_ 5可以是CCD_ 6或CCD_。
感谢您的所有输入,但在我这边,我最终选择了使用cmake 的-m32破解
# cmake windows 32 bits mode bug: 32 bits link mode must be explicit (otherwise cmake will always guess a 64 bits target)
# 1- run "vcbarsall.bat x86" to setup Visual Studio build profile
# 2- "set cflags=-m32" and "set cxxflags=-m32"
# 3- let the cmake plugin "automatically" guess the target platform
- Visual Studio C++ 它只构建选项卡中显示的文件吗?
- 以现代 CMake 方式控制包含的库中的构建选项(测试等)
- 使用Bazel构建具有不同编译器/链接器选项的C/C++依赖关系
- OpenSSL with CMake - 未知选项: --sysroot 在构建 openSSL 时
- C++:构建选项"-j"是什么意思?
- 当 /Whorearchive选项处于活动状态时,无法使用Visual Studio链接到Windows上的自构建张量
- 我如何在Qt中选择构建选项
- 如何从"开始组..结束组"链接器选项构建文件列表
- 使用-PG选项构建时出现不同的意外错误
- C++构建系统 - 远程编译和链接选项
- 从源代码构建Qt 5.8 - 配置:未知命令行选项'-c++11'
- gcc:错误:在 MacOSX 上构建 openjdk9 时'-mstack-alignment=16'无法识别的命令行选项
- Qt 5测试版2,Qt Creator 2.6,MSVC错误:Qt Creaator需要一个编译器来构建.在工具包选项中
- 代码::封锁前构建选项与命令行(QT)不一致
- 在MinGW中使用-j(jobs)选项构建wxWidgets时出错
- C++:使用 g++ 和 -m32 选项构建的 c++ 库在 Msys 下构建 wxWidgets 项目时出现 ld 不
- 为什么我在构建 avin2/SensorKinect for android、NDK、gcc 时出现无法识别的选项"--dynamic-linker"错误
- QtCreator 在使用 cmake 构建时会忽略 cmake 选项
- 将cmake构建选项导出到外部项目
- Sublime Text:编译器构建选项