Применение Cmake для сборки C++ приложений - Студенческий научный форум

XVII Международная студенческая научная конференция Студенческий научный форум - 2025

Применение Cmake для сборки C++ приложений

Берестнева М.Л. 1
1ФГБОУ ВО "Брянский государственный университет имени академика И.Г. Петровского"
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

В современном мире разработка программного обеспечения является сложным и многогранным процессом, который требует от разработчиков высокого уровня профессионализма и навыков. Одним из ключевых аспектов разработки является процесс сборки проекта, который включает в себя компиляцию исходного кода, компоновку библиотек и другие операции. Этот процесс может быть трудоёмким и времязатратным, особенно если проект имеет сложную структуру или множество зависимостей.

Для упрощения процесса сборки и автоматизации рутинных задач разработчики используют различные инструменты и системы сборки. Одним из наиболее популярных и широко используемых инструментов является CMake.

Целью доклада является рассмотрение основных принципов работы с Cmake и его возможностей. Рассмотрим основные понятия, связанные с CMake, а также приведём пример настройки проекта с помощью этого инструмента. В качестве примера настроим CMake для сборки проекта с использованием GUI с применением библиотеки GTKmm в ОС Linux Mint. Кроме того, обсудим интеграцию CMake в Visual Studio Code, как наиболее популярную IDE для Linux.

CMake — это кроссплатформенный инструмент с открытым исходным кодом, который автоматизирует процесс сборки программного обеспечения. Он позволяет создавать независимые от платформы файлы сборки, которые можно использовать для создания проектов на различных операционных системах и платформах.

Можно выделить основные принципы CMake.

1. Настраиваемость позволяет разработчикам настраивать процесс сборки в соответствии с требованиями проекта, и включает в себя выбор компилятора, определение зависимостей, настройку параметров сборки.

2. Кроссплатформенность инструмента позволяет поддерживать различные операционные системы и платформы, что делает его универсальным инструментом для разработки программного обеспечения.

3. Использование концепции модулей позволяет улучшить организацию кода и упростить процесс его сборки. Модули могут быть добавлены или удалены в зависимости от требований проекта.

4. CMake автоматизирует многие рутинные задачи, связанные со сборкой, такие как компиляция исходного кода, компоновка библиотек и генерация файлов сборки.

Файл CMakeLists.txt служит скриптом (сценарием) сборки проекта. Обычно один такой файл собирает все исходники в своём каталоге и в подкаталогах, при этом подкаталоги могут содержать, а могут и не содержать дочерние файлы CMakeLists.txt (листинг 1).

Листинг 1

cmake_minimum_required(VERSION 3.5.0)

project(Test VERSION 0.1.0 LANGUAGES C CXX)

add_executable(Test main.cpp)

В листинге команда cmake_minimum_required проверяет запущенную версию CMake: если она меньше указанного минимума, то CMake завершает свою работу фатальной ошибкой. Чтобы начать проект, используется команда project() для установки имени проекта. Этот вызов требуется для каждого проекта и должен вызываться вскоре после cmake_minimum_required(). Команда add_executable() указывает CMake создать исполняемый файл, используя указанные файлы исходного кода.

Часто приходится подключать дополнительные библиотеки к проекту, тогда в файл CMakeLists.txt вносятся дополнения (листинг 2).

Листинг 2

cmake_minimum_required(VERSION 3.5.0)

project(Test VERSION 0.1.0 LANGUAGES C CXX)

FIND_PACKAGE(PkgConfig REQUIRED)

PKG_CHECK_MODULES(GTK REQUIRED gtkmm-3.0)

INCLUDE_DIRECTORIES(${GTK_INCLUDE_DIRS})

LINK_DIRECTORIES(${GTK_LIBRARY_DIRS})

ADD_DEFINITIONS(${GTK_CFLAGS_OTHER})

add_executable(Test main.cpp)

TARGET_LINK_LIBRARIES(Test ${GTK_LIBRARIES})

Третья строка подключает утилиту PkgConfig, предоставляющую интерфейс для получения информации об установленных программных библиотеках, таких как параметры для C или C++ компилятора, параметры для компоновщика, а также версию пакета.

Инструмент позволяет передавать для включения пути или пути к библиотекам инструментам для сборки во время процесса конфигурирования и выполнения команд программы CMake.

Следующей строкой при помощи PkgConfig сообщаем CMake, что надо подключить библиотеку GTKmm версии 3.0. Модуль создаст несколько переменных, которые будут фигурировать далее.

Если в IDE уже выполнено подключение CMake, то следующая строка передаёт ей пути до заголовочных файлов. В таком случае IDE не будет выдавать ошибки вида «Не могу найти файл ...».

В составе C++ компилятора используется компоновщик, которые «упаковывает» промежуточные файлы и скомпилированные библиотеки в один файл. Поэтому следующей строкой сообщаем CMake пути до скомпилированных файлов библиотек.

Далее передаём флаги для компилятора, чтобы он смог собрать проект. И последней строкой сообщаем, что надо всё собрать в файл Test.

Многие IDE умеют работать с инструментом CMake. Покажем интеграцию CMake в IDE Visual Studio Code (далее VSCode). В редакторе VSCode можно установить расширение CMake Tools, выбрав вариант на вкладке VS Code Marketplace (рис. 1).

Рисунок 1 — Вкладка с CMake

На этом процесс интеграции закончен. Чтобы создать проект, нужно открыть папку проекта через VSCode. Потом вызываем палитру команд (Ctrl + Shift + P) и выбираем CMake: Quick Start.

Далее вводим имя проекта, указываем язык C++, выбираем пункт Executable и готово. В корне проекта появится исходный файл, файл CmakeLists.txt и папка build.

Рисунок 2 — Окно VSCode с CMake

Удобство заключается в том, что для работы с CMake не нужно прибегать к командной строке, для сборки проекта достаточно нажать кнопку Build внизу экрана.

В качестве примера соберём простой проект «Убегающая кнопка». Данный проект написан с использованием библиотеки GTKmm (C++ обёртка для библиотеки GTK). Для начала напишем код в main.cpp (листинг 3).

Листинг 3

#include <gtkmm.h>

using namespace Glib;

using namespace Gtk;

class WindowMain : public Window {

public:

WindowMain() {

add(fixed);

fixed.set_size_request(400, 400);

button.set_label("Поймайменя");

fixed.add(button);

fixed.move(button, 200, 200);

button.signal_enter().connect([&]() {

fixed.move(button, rand() % 300, rand() % 300);

});

set_title("Моя первая программа");

show_all();

}

private:

Fixed fixed;

Button button;

};

int main(int argc, char* argv[]) {

Gtk::Main kit(argc, argv);

WindowMain example;

Gtk::Main::run(example);

return 0;

}

Для сборки возьмём ранее описанный CMakeLists.txt. После нажатия на кнопку «Собрать» проект будет собран, и программа запустится.

CMake является мощным и гибким инструментом для автоматизации процесса сборки программного обеспечения. Он позволяет разработчикам создавать независимые от платформы файлы сборки, которые можно использовать для создания проектов на различных операционных системах и платформах. Использование CMake может значительно упростить процесс разработки программного обеспечения, повысить его качество и сократить время на сборку и тестирование.

Список использованных источников
  1. Немчинский С. CMake. Программирование для начинающих. — М.: Эксмо, 2023. — 272 с.

  2. Официальная документация CMake [Электронный ресурс]. — Режим доступа: https://cmake.org/documentation/ (дата обращения: 27.11.2024).

Просмотров работы: 10