Возможность принудительной 32-разрядной или 64-разрядной сборки с cmake

Я хотел бы предложить способ, который всегда строит мою цель как 32-разрядный или всегда как 64-разрядный исполняемый файл с cmake независимо от хост-системы (добавление флага "- m32" или "- m64" для gcc, еще не уверен, что делать для других компиляторов).

Я могу придумать три способа сделать это, который я должен использовать?

  1. опция (- DUSE32bit=true)
  2. цепочка инструментов (- DCMAKE_TOOLCHAIN_FILE=64bit.toolchain)
  3. типы построения (- DCMAKE_BUILD_TYPE=release32)

в моем случае принудительная 32-битная сборка будет по умолчанию и должна быть проста в использовании. Принудительная 64-разрядная сборка также полезна для некоторых случаев и не должна быть слишком сложной. Используя разрядность хост-системы редко имеет смысл для моего случая и я не хочу его поддерживать.

Я нашел связанный с этим вопрос здесь (правильный способ принудительной 32-битной компиляции с помощью CMake), но ответы, в основном, обсуждают, как это может быть сделано вообще, а не как лучше сделать его настраиваемым.

2 ответов


TL; DR

использовать toolchain

глубиной

  1. опция (- DUSE32bit=true)

это не масштабируется, я думаю. Ну и что, если вы хотите построить N проектов? Вы должны добавить N вариантов.

  1. типы сборки (- DCMAKE_BUILD_TYPE=release32)

это может работать хорошо. Но, по-моему, вы смешиваете несвязанные вещи. Также я уверен, что вы должны адаптация find_package поведение, установив некоторые *_ROOT переменные CMake. Это невозможно сделать с CMAKE_BUILD_TYPE (по крайней мере, опять же, в варианте с масштабированием).

  1. цепочка инструментов (- 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