Возможность принудительной 32-разрядной или 64-разрядной сборки с cmake
Я хотел бы предложить способ, который всегда строит мою цель как 32-разрядный или всегда как 64-разрядный исполняемый файл с cmake независимо от хост-системы (добавление флага "- m32" или "- m64" для gcc, еще не уверен, что делать для других компиляторов).
Я могу придумать три способа сделать это, который я должен использовать?
- опция (- DUSE32bit=true)
- цепочка инструментов (- DCMAKE_TOOLCHAIN_FILE=64bit.toolchain)
- типы построения (- DCMAKE_BUILD_TYPE=release32)
в моем случае принудительная 32-битная сборка будет по умолчанию и должна быть проста в использовании. Принудительная 64-разрядная сборка также полезна для некоторых случаев и не должна быть слишком сложной. Используя разрядность хост-системы редко имеет смысл для моего случая и я не хочу его поддерживать.
Я нашел связанный с этим вопрос здесь (правильный способ принудительной 32-битной компиляции с помощью CMake), но ответы, в основном, обсуждают, как это может быть сделано вообще, а не как лучше сделать его настраиваемым.
2 ответов
TL; DR
использовать toolchain
глубиной
- опция (- DUSE32bit=true)
это не масштабируется, я думаю. Ну и что, если вы хотите построить N проектов? Вы должны добавить N вариантов.
- типы сборки (- DCMAKE_BUILD_TYPE=release32)
это может работать хорошо. Но, по-моему, вы смешиваете несвязанные вещи. Также я уверен, что вы должны адаптация find_package
поведение, установив некоторые *_ROOT
переменные CMake. Это невозможно сделать с CMAKE_BUILD_TYPE
(по крайней мере, опять же, в варианте с масштабированием).
- цепочка инструментов (- DCMAKE_TOOLCHAIN_FILE=64bit.toolchain)
лучший вариант. Если вы хотите построить два проекта-просто используйте одну и ту же toolchain:
cmake -Hproj-1 -B_builds/proj-1 -DCMAKE_TOOLCHAIN_FILE=/.../64bit.toolchain
cmake -Hproj-2 -B_builds/proj-2 -DCMAKE_TOOLCHAIN_FILE=/.../64bit.toolchain
если вы хотите построить свой сторонний ExternalProject_Add с 64-битной архитектурой-просто передайте toolchain CMAKE_ARGS:
ExternalProject_Add(
...
CMAKE_ARGS ... -DCMAKE_TOOLCHAIN_FILE=/.../64bit.toolchain
...
)
хотите адаптировать find_package
- просто добавьте любые переменные CMake в файл toolchain.
для Visual Studio и per https://cmake.org/cmake/help/latest/variable/CMAKE_GENERATOR_PLATFORM.html
для генераторов Visual Studio с VS 2005 и выше указывает целевую архитектуру.
cmake . -DCMAKE_GENERATOR_PLATFORM=x64