Сборка проектов из командной строки

Добавлено 3 января 2023 в 12:43

В данной статье объясняется, как конфигурировать и собирать существующие проекты. Если вы хотите узнать, как создать проект CMake на основе Qt, смотрите статью о том, как начать работу с CMake.

Чтобы собрать проект на Qt, CMake необходимо знать, где находится установка Qt. Обычно это делается путем установки переменной CMake CMAKE_PREFIX_PATH в значение префикса пути установки Qt. Если вы выполняете кросс-компиляцию, смотрите раздел Кросс-компиляция для получения подробной информации о дополнительных переменных, которые вам необходимо установить.

Если Qt устанавливается с помощью онлайн-установщика, выберите версию Qt в каталоге установки верхнего уровня. Например, следующая команда показывает, как это делается в Windows:

cmake -DCMAKE_PREFIX_PATH=C:\Qt\6.2.6\msvc2019_64 -S <source-dir> -B <build-dir>

Заполнители <source-dir> и <build-dir> представляют каталог с исходниками и каталог сборки вашего проекта.

Генераторы CMake

CMake создает необходимые системные файлы сборки, которые позволяют использовать для сборки вашего проекта такие инструменты, как GNU Make или Ninja,.

Генератор CMake по умолчанию зависит от платформы и среды сборки. Например, в Windows CMake создает файлы проекта Visual Studio, если обнаруживается среда Visual Studio.

Для единообразия опыта разработчиков на всех платформах используйте генератор Ninja или Ninja Multi-Config.

Вы можете выбрать генератор CMake, установив переменную среды CMAKE_GENERATOR или используя аргумент -G:

cmake -G Ninja ...

qt-cmake

Скрипт qt-cmake – удобная альтернатива для настройки вашего проекта. Он избавляет вас от необходимости указывать CMAKE_PREFIX_PATH. Вы можете найти его в каталоге bin в каталоге установки Qt. Этот скрипт передает все параметры в CMake, так что вы можете использовать его так же, как и cmake:

C:\Qt\6.2.6\msvc2019_64\bin\qt-cmake -G Ninja -S <source-dir> -B <build-dir>

После создания системных файлов сборки ваш проект готов к сборке:

cd <build-dir>
ninja

Вы также можете использовать независимую от генератора команду CMake:

cmake --build <build-dir>

Кросс-компиляция

Создание вашего проекта для платформы, отличной от вашей машины разработки, называется кросс-компиляцией. Примером является сборка для Android (целевая платформа) на компьютере с Windows (основная платформа).

Для кросс-компиляции с помощью CMake для большинства платформ требуется файл цепочки инструментов. Также в дополнение к версии Qt для целевой платформы требуется версия Qt для системы разработки. Например, вам нужно установить Qt для Windows и Qt для Android для кросс-компиляции для Android в Windows.

Используйте qt-cmake из установки Qt для целевой платформы, чтобы кросс-компилировать ваш проект для этой платформы:

<target-qt>/bin/qt-cmake -S <source-dir> -B <build-dir>

Это настроит ваш проект для целевой платформы. Файл цепочки инструментов передается автоматически, и, возможно, настраиваются другие переменные для конкретной платформы.

Указание пользовательского файла цепочки инструментов

Скрипт qt-cmake передает внутренний файл цепочки инструментов Qt в CMake. Этот файл цепочки инструментов устанавливает несколько переменных, специфичных для целевой платформы Qt.

Если вы используете установку Qt, которая не была собрана на вашем компьютере, qt-cmake необходимо знать расположение файла цепочки инструментов CMake для целевой платформы.

В таком случае вы можете указать qt-cmake загрузить пользовательский файл цепочки инструментов, установив переменную QT_CHAINLOAD_TOOLCHAIN_FILE:

~/Qt/6.2.6/android_armv7/bin/qt-cmake -DQT_CHAINLOAD_TOOLCHAIN_FILE=<file-path> -S <source-dir> -B <build-dir>

Это указывает внутреннему файлу цепочки инструментов Qt также загрузить ваш пользовательский файл цепочки инструментов.

Теги

CMakeQtПрограммированиеСистема сборки

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.