Я хочу знать, как я могу написать настройку CMake, которая позволяет компиляцию для архитектур x86 и x64 с использованием любого компилятора и ОС.
Сборник мультиархитектуры CMake
Ответ 1
Было бы замечательно, если бы у 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
Обновление апреля 2019
Это старый ответ, некоторые вещи изменились, особенно для генератора VS на Windows.
с cmake 3.14 и установленной Visual Studio 2019
cmake -G "Visual Studio 16 2019" -A x64 path\to\source\dir
скомпилировать 64-битную (x64). Обычно вы можете опустить оба параметра -G и -A на компьютере с архитектурой x64 (вы используете ОС x64 в 2019 году, верно?)
cmake -G "Visual Studio 16 2019" -A Win32 path\to\source\dir
скомпилировать 32бит.
Ответ 2
Существует учебник CMake, доступный в Интернете, чтобы перейти к основам, это взято из книги CMake. Философия CMake заключается в использовании нескольких каталогов сборки с одним деревом источника. Таким образом, вы можете использовать Visual Studio в Windows и создать каталог сборки с использованием 32-битного компилятора, а другой - с помощью 64-битного компилятора.
CMake нацеливается на большое количество компиляторов и операционных систем, но вы не указываете, какой язык вы используете, какую операционную систему/компилятор/архитектуры вы думаете, и если вы используете какие-либо инструментальные средства/библиотеки.
Ответ 3
Если CMAKE_OSX_ARCHITECTURES = i386 дает вам ошибку "непризнанная опция -arch" start over и вместо этого попробуйте:
cmake -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_SYSTEM_PROCESSOR=i386 -DCMAKE_SYSTEM_VERSION=10