Обновление статьи о fltk

This commit is contained in:
MultiMote 2023-01-07 19:28:08 +03:00
parent 8f2ca5058e
commit 8b77a9a90a
4 changed files with 102 additions and 11 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

@ -6,11 +6,17 @@ categories: ["cpp"]
featured_image: thumb.png featured_image: thumb.png
--- ---
Обновление статейки по созданию [приложений на FLTK](/fltk-apps), так как нынче всё стало проще. Обновление статейки по созданию [приложений на FLTK](/fltk-apps), так как нынче установка
библиотек и компилятора стала проще.
<!--more--> <!--more-->
# Часть первая установка msys2 Содержание:
{{< toc >}}
## Часть первая установка msys2
Начнём. Скачиваем установщик msys2 с [официального сайта](https://www.msys2.org): Начнём. Скачиваем установщик msys2 с [официального сайта](https://www.msys2.org):
@ -31,7 +37,7 @@ pacman -Syu
![update-phase-1](update-phase-1.png) ![update-phase-1](update-phase-1.png)
Снова выполяем Снова выполняем:
```bash ```bash
pacman -Syu pacman -Syu
@ -43,13 +49,13 @@ pacman -Syu
Готово! msys2 и его компоненты теперь последней версии и готовы к работе. Готово! msys2 и его компоненты теперь последней версии и готовы к работе.
# Часть вторая установка инструментария разработчика ## Часть вторая установка инструментария разработчика
Осталось установить компилятор, базовые инструменты для компиляции, cmake, fltk. Осталось установить компилятор, базовые инструменты для компиляции, cmake, fltk.
Мне кажется, если вы выбрали fltk, то вас интересует поддержка старых машин. Поэтому устанавливаем 32-битные версии компилятора и библиотек. Если вас интересует платформа x64, то вместо **i686** в названиях пакетов используйте **x86_64** (например, mingw-w64-**x86_64**-fltk). Мне кажется, если вы выбрали fltk, то вас интересует поддержка старых машин. Поэтому устанавливаем 32-битные версии компилятора и библиотек. Если вас интересует платформа x64, то вместо **i686** в названиях пакетов используйте **x86_64** (например, mingw-w64-**x86_64**-fltk).
Выполняем Выполняем:
```bash ```bash
pacman -S base-devel mingw-w64-i686-gcc mingw-w64-i686-cmake mingw-w64-i686-fltk 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) ![install-devtools](install-devtools.png)
# Часть третья - пишем и собираем приложения ## Часть третья - пишем и собираем приложения
## Код ### Пример приложения
В этот раз будет программа, считающая нажатия на кнопку. В этот раз будет программа, считающая нажатия на кнопку:
```cpp ```cpp
#include <cstdio> #include <cstdio>
@ -122,7 +128,7 @@ int main(void) {
} }
``` ```
## Сборка напрямую ### Сборка напрямую
Для начала пробуем всё собрать напрямую компилятором, без систем сборки. Мой проект находится в D:/code. Поэтому нужно перейти в этот каталог. Для начала пробуем всё собрать напрямую компилятором, без систем сборки. Мой проект находится в D:/code. Поэтому нужно перейти в этот каталог.
@ -159,6 +165,91 @@ ldd main.exe
![app](app.gif) ![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.
Чтобы избавиться от необходимости его использования, необходимо выполнить всего лишь...
скоро будет