我想知道如何编写CMake设置,该设置允许使用任何编译器和操作系统编译x86和x64体系结构。CMake多体系结构编译
回答
如果CMake开箱即用32/64位选项,那将会很棒。它不会,所以你将需要应用不同的编译器或生成器依赖方法之一。例如:
GCC(在Linux上)和一些其他编译器,例如, Sun Studio。将
CFLAGS
和CXXFLAGS
设置为包含-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
这太棒了!但对于Visual Studio来说,它不应该是-G,因为它是一个生成器?此外,对于Visual Studio,是否可以在CMakeLists.txt文件中设置某种标志以自动告诉它使用哪个标志(即请求您选择i386还是x86-64,并根据您的响应进行设置)? – OniLink 2011-03-19 04:45:27
它应该是-G,并且生成器必须通过命令行传入。您也可以使用cmake-gui,一个基于Qt的图形界面,并从下拉列表中选择合适的生成器。 – 2011-03-19 14:10:50
@OniLink,@Marcus。是的,它应该是-G。非常感谢您的注意!我现在修复了它(并修复了MySQL Wiki中的相同段落)。据我所知,改变了CMakeLists中Visual Studio的位置。txt是不可能的,这里的位是生成器的属性,并且生成器不能动态设置/更改。 – 2011-03-19 21:02:33
有一个CMake tutorial可在网上查阅基本知识,这是从CMake书中采取的。 CMake哲学是使用多个构建目录,并使用单一源代码树。因此,您可以在Windows上使用Visual Studio,并使用32位编译器创建构建目录,使用64位编译器创建构建目录。尽管CMake的目标是大量的编译器和操作系统,但是你没有提到你使用的是什么语言,你正在考虑哪种操作系统/编译器/体系结构,以及你是否使用了任何工具包/库。
答案与问题无关。 – Yola 2018-02-05 09:15:37
如果CMAKE_OSX_ARCHITECTURES = I386给你的错误 “无法识别的选项-arch” 重新开始,而是尝试:
cmake -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_SYSTEM_PROCESSOR=i386 -DCMAKE_SYSTEM_VERSION=10
- 1. 为ARM体系结构编译libcivil
- 2. 没有可编译的体系结构
- 3. 没有体系结构编译iphone sdk
- 4. 任意体系结构的可编译目标编译器
- 5. 为iPhone 6编译错误(没有体系结构编译)
- 6. 用于VLIW体系结构的GCC编译器基础结构
- 7. C编译器对体系结构的依赖关系
- 8. 库编译为体系结构x64,具有ARM架构错误
- 9. 构建活动体系结构不会导致编译错误
- 10. stackmob 1对多关系体系结构
- 11. 从源代码编译和使用glibc-2.13 x86_64体系结构
- 12. 体系结构x86_64的未定义符号 - 编译继承类
- 13. gfortran编译错误:体系结构x86_64的未定义符号
- 14. 在Ubuntu 32位编译为64位体系结构
- 15. Caffe编译失败:体系结构x86_64的未定义符号?
- 16. 编译C++时体系结构x86_64的未定义符号
- 17. NVIDIA CUDA SDK示例编译不支持的体系结构'compute_20'
- 18. j2objc编译错误:未定义的符号体系结构arm64:
- 19. 没有体系结构编译为(ARCHS =,VALID_ARCHS = armv7 armv7s)
- 20. 如何在编译时使用Fortran检测体系结构?
- 21. 升级到xcode 4错误没有体系结构编译为
- 22. 编译.C文件:体系结构x86_64的未定义符号
- 23. 在x86_64体系结构中编译为32位模式
- 24. Xcode iOS6编译错误:没有体系结构
- 25. Tiger编译器的目标体系结构
- 26. 以.NET编译器为目标的ARM体系结构
- 27. 编译具有特定体系结构的C程序
- 28. 体系结构x86_64的未定义符号:使用C++编译
- 29. 如何确定我在GCC中编译的体系结构?
- 30. 是否有可能在linux上为许多体系结构编译c?
可能相关:http://stackoverflow.com/questions/5280168/使交叉平台库与Cmake – 2011-03-17 09:27:38