我想知道如何編寫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