Architecture CMake多体系结构编译
我想知道如何编写一个CMake设置程序,允许使用任何编译器和操作系统编译x86和x64体系结构。有一个在线工具,可以浏览CMake手册中的基础知识。CMake的理念是使用多个构建目录和一个源代码树。因此,您可以在Windows上使用Visual Studio,使用32位编译器创建一个构建目录,使用64位编译器创建另一个构建目录Architecture CMake多体系结构编译,architecture,compilation,cmake,Architecture,Compilation,Cmake,我想知道如何编写一个CMake设置程序,允许使用任何编译器和操作系统编译x86和x64体系结构。有一个在线工具,可以浏览CMake手册中的基础知识。CMake的理念是使用多个构建目录和一个源代码树。因此,您可以在Windows上使用Visual Studio,使用32位编译器创建一个构建目录,使用64位编译器创建另一个构建目录 CMake以大量编译器和操作系统为目标,但您没有提到您正在使用的语言、您正在考虑的操作系统/编译器/体系结构以及您是否正在使用任何工具包/库。如果CMake有一个现成的3
CMake以大量编译器和操作系统为目标,但您没有提到您正在使用的语言、您正在考虑的操作系统/编译器/体系结构以及您是否正在使用任何工具包/库。如果CMake有一个现成的32/64位选项,那就太好了。它不是,因此您需要应用不同的编译器或生成器依赖的方法之一。例如:
- GCC(在Linux上)和其他一些编译器,例如Sun Studio。将
和CFLAGS
设置为包括cxflags
(32位构建)或-m32
(64位构建)-m64
- Windows,Visual Studio生成器。使用64位生成器,例如
编译64位(x64)。在生成器名称中省略“Win64”以生成32位cmake-G“Visual Studio 10 Win64”路径\to\source\dir
- Mac OS X。使用
CMAKE\u OSX\u体系结构
CMAKE变量
将编译32位构建cmake-DCMAKE\u OSX\u architecture=i386/path/to/source/dir
将编译64位cmake-DCMAKE\u OSX\u architecture=x86\u 64/path/to/source/dir
将创建96位通用二进制文件:)cmake“-DCMAKE\u OSX\u architecture=x86\u 64;i386”/path/to/source/dir
cmake-G“Visual Studio 16 2019”-一个x64路径\to\source\dir
编译64位(x64)。您通常可以在x64机器上同时省略-G和-A参数(您在2019年使用的是x64操作系统,对吗?)
cmake-G“Visual Studio 16 2019”-一个Win32路径\to\source\dir
编译32位。如果CMAKE_OSX_ARCHITECTURES=i386出现错误“Unrecogned option-arch”,请重新开始,并尝试:
cmake -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_SYSTEM_PROCESSOR=i386 -DCMAKE_SYSTEM_VERSION=10
可能相关:这太棒了!但是对于VisualStudio来说,既然它是一个生成器,它不应该是-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”)
(体系结构中的sub),64位和32位实际上是不同的编译器,不像gcc,在gcc中,architectue是传递给编译器的标志。我猜这就是原因。答案与问题无关。