diff --git a/content/posts/fltk-msys2-cmake/cmake-msys-build.png b/content/posts/fltk-msys2-cmake/cmake-msys-build.png new file mode 100644 index 0000000..a09f9d0 Binary files /dev/null and b/content/posts/fltk-msys2-cmake/cmake-msys-build.png differ diff --git a/content/posts/fltk-msys2-cmake/cmake-msys-gen.png b/content/posts/fltk-msys2-cmake/cmake-msys-gen.png new file mode 100644 index 0000000..ac3ec8f Binary files /dev/null and b/content/posts/fltk-msys2-cmake/cmake-msys-gen.png differ diff --git a/content/posts/fltk-msys2-cmake/cmake-msys-ldd.png b/content/posts/fltk-msys2-cmake/cmake-msys-ldd.png new file mode 100644 index 0000000..87541a5 Binary files /dev/null and b/content/posts/fltk-msys2-cmake/cmake-msys-ldd.png differ diff --git a/content/posts/fltk-msys2-cmake/index.md b/content/posts/fltk-msys2-cmake/index.md index 0b1d09f..0f1aa30 100644 --- a/content/posts/fltk-msys2-cmake/index.md +++ b/content/posts/fltk-msys2-cmake/index.md @@ -6,11 +6,17 @@ categories: ["cpp"] featured_image: thumb.png --- -Обновление статейки по созданию [приложений на FLTK](/fltk-apps), так как нынче всё стало проще. +Обновление статейки по созданию [приложений на FLTK](/fltk-apps), так как нынче установка +библиотек и компилятора стала проще. -# Часть первая – установка msys2 +Содержание: + +{{< toc >}} + +## Часть первая – установка msys2 + Начнём. Скачиваем установщик msys2 с [официального сайта](https://www.msys2.org): @@ -31,7 +37,7 @@ pacman -Syu ![update-phase-1](update-phase-1.png) -Снова выполяем +Снова выполняем: ```bash pacman -Syu @@ -43,13 +49,13 @@ pacman -Syu Готово! msys2 и его компоненты теперь последней версии и готовы к работе. -# Часть вторая – установка инструментария разработчика +## Часть вторая – установка инструментария разработчика Осталось установить компилятор, базовые инструменты для компиляции, cmake, fltk. Мне кажется, если вы выбрали fltk, то вас интересует поддержка старых машин. Поэтому устанавливаем 32-битные версии компилятора и библиотек. Если вас интересует платформа x64, то вместо **i686** в названиях пакетов используйте **x86_64** (например, mingw-w64-**x86_64**-fltk). -Выполняем +Выполняем: ```bash pacman -S base-devel mingw-w64-i686-gcc mingw-w64-i686-cmake mingw-w64-i686-fltk @@ -57,11 +63,11 @@ pacman -S base-devel mingw-w64-i686-gcc mingw-w64-i686-cmake mingw-w64-i686-fltk ![install-devtools](install-devtools.png) -# Часть третья - пишем и собираем приложения +## Часть третья - пишем и собираем приложения -## Код +### Пример приложения -В этот раз будет программа, считающая нажатия на кнопку. +В этот раз будет программа, считающая нажатия на кнопку: ```cpp #include @@ -122,7 +128,7 @@ int main(void) { } ``` -## Сборка напрямую +### Сборка напрямую Для начала пробуем всё собрать напрямую компилятором, без систем сборки. Мой проект находится в D:/code. Поэтому нужно перейти в этот каталог. @@ -159,6 +165,91 @@ ldd main.exe ![app](app.gif) -## Сборка через cmake +### Сборка через CMake + +#### Вариант 1 - внутри msys2 + +Для cmake хорошим тоном является создавать директорию сборки вне директории проекта. Поэтому немного изменим структуру нашего проекта: + +``` +D:\code + ├───build + └───fltk-app + ├───CmakeLists.txt + └───main.cpp +``` + +Создаём CmakeLists.txt, который также будет поддерживать статическую сборку: + +```cmake +cmake_minimum_required(VERSION 3.2) + +project(fltk-app) + +option(STATIC_BUILD "Enable static build" ON) + +# Конфигурируем статическую сборку для mingw +if(STATIC_BUILD AND MINGW) + set(BUILD_SHARED_LIBS OFF) + set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") + set(CMAKE_EXE_LINKER_FLAGS "-static -mwindows") +endif() + +# Ищем библиотеку fltk в системе +# При успешном поиске станут доступны переменные, описанные здесь: +# https://cmake.org/cmake/help/latest/module/FindFLTK.html +find_package(FLTK REQUIRED) + +# Указываем исходные файлы проекта +add_executable(fltk-app main.cpp) + +# Добавляем путь к заготовкам fltk для компиляции (в случаях, когда они находятся в произвольном месте) +target_include_directories(fltk-app PUBLIC ${FLTK_INCLUDE_DIRS}) + +# Подключаем библиотеки +target_link_libraries(fltk-app ${FLTK_BASE_LIBRARY}) + +# Также добавляем необходимые библиотеки при сборке на windows +if(WIN32) + target_link_libraries(fltk-app comctl32) +endif() +``` + +> Файл проекта пока что адаптирован только для windows. + +Переходим в каталог сборки: + +```bash +cd /d/code/build +``` + +Далее необходимо создать файлы для конкретной системы сборки. У нас это **MSYS Makefiles**: + +```bash +cmake -G "MSYS Makefiles" /d/code/fltk-app +``` + +![cmake-msys-gen](cmake-msys-gen.png) + +Затем собираем проект: + +```bash +cmake --build . +``` + +![cmake-msys-build](cmake-msys-build.png) + +Проверяем, не появилось ли зависимостей: + +```bash +ldd /d/code/build/fltk-app.exe +``` + +![cmake-msys-ldd](cmake-msys-ldd.png) + +#### Вариант 2 - вне msys2 + +Сборка через msys2 удобна тогда, когда у нас уже есть готовый проект. +Однако когда речь идёт о разработке, то мало какая IDE позволит себе роскошь запускать сборку в окружении msys2. +Чтобы избавиться от необходимости его использования, необходимо выполнить всего лишь... -скоро будет