2023-01-03 18:45:08 +03:00
|
|
|
|
---
|
2023-01-07 20:13:30 +03:00
|
|
|
|
title: "FLTK - упрощаем себе жизнь с msys2 (часть 2)"
|
|
|
|
|
date: 2023-01-07T19:46:00+03:00
|
2023-01-03 18:45:08 +03:00
|
|
|
|
draft: false
|
|
|
|
|
categories: ["cpp"]
|
2023-01-03 19:19:01 +03:00
|
|
|
|
featured_image: thumb.png
|
2023-01-03 18:45:08 +03:00
|
|
|
|
---
|
|
|
|
|
|
2023-01-07 20:13:30 +03:00
|
|
|
|
Собираем приложения на FLTK с помощью msys2 и [CMake](https://cmake.org)!
|
2023-01-03 18:45:08 +03:00
|
|
|
|
|
|
|
|
|
<!--more-->
|
|
|
|
|
|
2023-01-07 20:13:30 +03:00
|
|
|
|
Предыдущая часть с установкой всего необходимого находится [тут](/fltk-msys2).
|
2023-01-07 19:28:08 +03:00
|
|
|
|
|
2023-01-07 20:13:30 +03:00
|
|
|
|
## Вариант 1 - собираем приложение внутри msys2
|
2023-01-07 19:28:08 +03:00
|
|
|
|
|
2023-01-07 20:13:30 +03:00
|
|
|
|
Для CMake хорошим тоном является расположение директорию сборки вне директории проекта.
|
|
|
|
|
Поэтому немного изменим структуру нашего проекта:
|
2023-01-07 19:28:08 +03:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
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)
|
|
|
|
|
|
2023-01-14 22:00:44 +03:00
|
|
|
|
# Ищем библиотеку fltk в системе
|
|
|
|
|
# При успешном поиске станут доступны переменные, описанные здесь:
|
|
|
|
|
# https://cmake.org/cmake/help/latest/module/FindFLTK.html
|
|
|
|
|
find_package(FLTK REQUIRED)
|
|
|
|
|
|
|
|
|
|
# Указываем исходные файлы проекта
|
|
|
|
|
add_executable(fltk-app main.cpp)
|
|
|
|
|
|
2023-01-07 19:36:13 +03:00
|
|
|
|
if(MINGW)
|
2023-01-07 23:29:21 +03:00
|
|
|
|
# Конфигурируем статическую сборку
|
2023-01-07 19:36:13 +03:00
|
|
|
|
if(STATIC_BUILD)
|
|
|
|
|
set(BUILD_SHARED_LIBS OFF)
|
2023-01-14 22:00:44 +03:00
|
|
|
|
set_target_properties(fltk-app PROPERTIES LINK_SEARCH_START_STATIC 1)
|
|
|
|
|
set_target_properties(fltk-app PROPERTIES LINK_SEARCH_END_STATIC 1)
|
2023-01-07 19:36:13 +03:00
|
|
|
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
# Отключаем окно команд
|
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -mwindows")
|
2023-01-07 19:28:08 +03:00
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
# Добавляем путь к заготовкам fltk для компиляции (в случаях, когда они находятся в произвольном месте)
|
|
|
|
|
target_include_directories(fltk-app PUBLIC ${FLTK_INCLUDE_DIRS})
|
|
|
|
|
|
|
|
|
|
# Подключаем библиотеки
|
2023-01-14 22:00:44 +03:00
|
|
|
|
target_link_libraries(fltk-app ${FLTK_BASE_LIBRARY})
|
2023-01-07 19:28:08 +03:00
|
|
|
|
|
|
|
|
|
# Также добавляем необходимые библиотеки при сборке на 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)
|
|
|
|
|
|
2023-01-14 21:48:04 +03:00
|
|
|
|
Проверяем с помощью [Dependencies](https://github.com/lucasg/Dependencies), не появилось ли зависимостей:
|
2023-01-07 19:28:08 +03:00
|
|
|
|
|
2023-01-14 21:48:04 +03:00
|
|
|
|
![depends](depends.png)
|
2023-01-07 19:28:08 +03:00
|
|
|
|
|
2023-01-07 20:13:30 +03:00
|
|
|
|
## Вариант 2 - собираем приложение вне msys2
|
2023-01-07 19:28:08 +03:00
|
|
|
|
|
|
|
|
|
Сборка через msys2 удобна тогда, когда у нас уже есть готовый проект.
|
|
|
|
|
Однако когда речь идёт о разработке, то мало какая IDE позволит себе роскошь запускать сборку в окружении msys2.
|
|
|
|
|
Чтобы избавиться от необходимости его использования, необходимо выполнить всего лишь...
|
2023-01-03 18:45:08 +03:00
|
|
|
|
|