В современном мире разработка программного обеспечения является сложным и многогранным процессом, который требует от разработчиков высокого уровня профессионализма и навыков. Одним из ключевых аспектов разработки является процесс сборки проекта, который включает в себя компиляцию исходного кода, компоновку библиотек и другие операции. Этот процесс может быть трудоёмким и времязатратным, особенно если проект имеет сложную структуру или множество зависимостей.
Для упрощения процесса сборки и автоматизации рутинных задач разработчики используют различные инструменты и системы сборки. Одним из наиболее популярных и широко используемых инструментов является 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 может значительно упростить процесс разработки программного обеспечения, повысить его качество и сократить время на сборку и тестирование.
Немчинский С. CMake. Программирование для начинающих. — М.: Эксмо, 2023. — 272 с.
Официальная документация CMake [Электронный ресурс]. — Режим доступа: https://cmake.org/documentation/ (дата обращения: 27.11.2024).