2011-03-17 82 views
40

我想知道如何编写CMake设置,该设置允许使用任何编译器和操作系统编译x86和x64体系结构。CMake多体系结构编译

+0

可能相关:http://stackoverflow.com/questions/5280168/使交叉平台库与Cmake – 2011-03-17 09:27:38

回答

73

如果CMake开箱即用32/64位选项,那将会很棒。它不会,所以你将需要应用不同的编译器或生成器依赖方法之一。例如:

  • GCC(在Linux上)和一些其他编译器,例如, Sun Studio。将CFLAGSCXXFLAGS设置为包含-m32(32位版本)或-m64(64位版本)。

  • Windows,Visual Studio生成器。使用64位发生器,例如

    cmake -G "Visual Studio 10 Win64" path\to\source\dir

    编译64位(x64)。在发生器名称中省略“Win64”,以构建32位

  • Mac OS X.使用CMAKE_OSX_ARCHITECTURES CMake变量。

    cmake -DCMAKE_OSX_ARCHITECTURES=i386 /path/to/source/dir 将编译32位建立

    cmake -DCMAKE_OSX_ARCHITECTURES=x86_64 /path/to/source/dir 将编译64位。

    cmake "-DCMAKE_OSX_ARCHITECTURES=x86_64;i386" /path/to/source/dir将创造96位通用二进制代码:)

上面稍微改写。

http://dev.mysql.com/doc/internals/en/compiling-for-different-hardware-achitectures.html

+0

这太棒了!但对于Visual Studio来说,它不应该是-G,因为它是一个生成器?此外,对于Visual Studio,是否可以在CMakeLists.txt文件中设置某种标志以自动告诉它使用哪个标志(即请求您选择i386还是x86-64,并根据您的响应进行设置)? – OniLink 2011-03-19 04:45:27

+0

它应该是-G,并且生成器必须通过命令行传入。您也可以使用cmake-gui,一个基于Qt的图形界面,并从下拉列表中选择合适的生成器。 – 2011-03-19 14:10:50

+1

@OniLink,@Marcus。是的,它应该是-G。非常感谢您的注意!我现在修复了它(并修复了MySQL Wiki中的相同段落)。据我所知,改变了CMakeLists中Visual Studio的位置。txt是不可能的,这里的位是生成器的属性,并且生成器不能动态设置/更改。 – 2011-03-19 21:02:33

2

有一个CMake tutorial可在网上查阅基本知识,这是从CMake书中采取的。 CMake哲学是使用多个构建目录,并使用单一源代码树。因此,您可以在Windows上使用Visual Studio,并使用32位编译器创建构建目录,使用64位编译器创建构建目录。尽管CMake的目标是大量的编译器和操作系统,但是你没有提到你使用的是什么语言,你正在考虑哪种操作系统/编译器/体系结构,以及你是否使用了任何工具包/库。

+0

答案与问题无关。 – Yola 2018-02-05 09:15:37

0

如果CMAKE_OSX_ARCHITECTURES = I386给你的错误 “无法识别的选项-arch” 重新开始,而是尝试:

cmake -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_SYSTEM_PROCESSOR=i386 -DCMAKE_SYSTEM_VERSION=10