Обновление
@ -22,20 +22,25 @@ include::{l10ndir}/{lang}.adoc[]
|
||||
|GCC | Компилятор C/C{plus}{plus}
|
||||
|LLVM | Компилятор C/C{plus}{plus} и средства статического анализа
|
||||
|GDB | Отладчик
|
||||
|gcov | Анализатор покрытия кода
|
||||
|lcov | Генератор отчётов для gcov
|
||||
|Qt Creator | Среда разработки
|
||||
|uncrustify | Форматирование исходных текстов на языке C/C{plus}{plus}
|
||||
|git | Система контроля версий
|
||||
|pre-commit | Управление хуками git
|
||||
|CMake | Система управления проектом
|
||||
|cmake-format | Форматирование исходных текстов для CMake
|
||||
|Doxygen | Автоматическая генерация документации
|
||||
|===
|
||||
|
||||
Установка:
|
||||
При работе в совместимой с Debian операционной системе (Ubuntu, Astra Linux)
|
||||
требуемые программы можно установить командами:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
sudo apt-get install build-essential clang clang-tidy gdb qtcreator qt5-default
|
||||
sudo apt-get install cmake cmake-format doxygen git uncrustify
|
||||
sudo apt-get install build-essential gdb clang clang-tidy clang-tools clazy qtcreator
|
||||
sudo apt-get install qt5-default qttools5-dev qtbase5-private-dev qttools5-dev-tools
|
||||
sudo apt-get install cmake cmake-format doxygen lcov git uncrustify
|
||||
----
|
||||
|
||||
Для дальней работы потребуется установка пакетов `myx-dev`, в котором
|
||||
@ -58,6 +63,11 @@ sudo dpkg -i myx-cmake*deb myx-dev*deb
|
||||
sudo apt-get -f install
|
||||
----
|
||||
|
||||
Действия, приведённые в данном руководстве, необходимо выполнять
|
||||
в собственном репозитории. Для каждого раздела из этого документа созданы
|
||||
https://git.246060.ru/f1x1t?sort=oldest&q=myx-cmake[эталонные репозитории],
|
||||
с которыми можно сравнивать свой проект.
|
||||
|
||||
|
||||
== Структура каталогов проекта
|
||||
|
||||
@ -100,12 +110,12 @@ sudo apt-get -f install
|
||||
|`_build` | Результаты компиляции
|
||||
|`_build/debug` | Результаты компиляции в режиме отладки
|
||||
|`_build/debug/bin` | Исполняемые файлы
|
||||
|`_build/debug/etc` | Символическая ссылка на каталог `cmex/files/etc`
|
||||
|`_build/debug/etc` | Символическая ссылка на каталог `files/etc`
|
||||
|`_build/debug/include` | Заголовочные файлы копируемые и генерируемые во время сборки
|
||||
|`_build/debug/lib` | Статические и динамические библиотеки
|
||||
|`_build/debug/log` | Символическая ссылка на каталог `cmex/files/log`
|
||||
|`_build/debug/share` | Символическая ссылка на каталог `cmex/files/share`
|
||||
|`_build/debug/var` | Символическая ссылка на каталог `cmex/files/var`
|
||||
|`_build/debug/log` | Символическая ссылка на каталог `files/log`
|
||||
|`_build/debug/share` | Символическая ссылка на каталог `files/share`
|
||||
|`_build/debug/var` | Символическая ссылка на каталог `files/var`
|
||||
|`_build/release` | Результаты компиляции в режиме выпуска (иерархия аналогична `debug`)
|
||||
|`.git` | Системные файлы репозитория Git
|
||||
|`cmake` | Файлы с дополнительными функциями для CMake
|
||||
@ -128,32 +138,50 @@ sudo apt-get -f install
|
||||
проекта внутрь иерархии каталогов с исходными текстами приводит к
|
||||
засорению формируемыми на этапе сборки файлами, которые затрудняют
|
||||
разработку, поиск в оригинальных файлах и мешают ориентироваться в
|
||||
проекте. При работе с несколькими типами сборки, например, отладка и
|
||||
выпуск, появляется необходимость корректного полного удаления
|
||||
результатов предыдущего тип сборки.
|
||||
проекте. Компиляция проекта в отдельном каталоге обеспечивает возможность
|
||||
одновременной работы с несколькими типами сборки, например, отладка и выпуск.
|
||||
|
||||
[[qtcreator]]
|
||||
== Qt Creator
|
||||
|
||||
Настройка программы Qt Creator для работы с описываемыми проектами
|
||||
приведена link:nastroika-qt-creator.html[здесь].
|
||||
|
||||
Некоторые описываемые ниже проекты требуют указания ключей для CMake.
|
||||
Это можно сделать в командной строке, добавив к ключу флаг `-D`.
|
||||
Например, чтобы активировать ключ `MYX_CMAKE_CODE_COVERAGE`, нужно к
|
||||
списку параметров командной строки добавить `-DMYX_CMAKE_CODE_COVERAGE=ON`.
|
||||
Также его можно включить в Qt Creator в режиме *Проекты*.
|
||||
|
||||
[.text-center]
|
||||
.Активация ключа `MYX_CMAKE_CODE_COVERAGE` в Qt Creator
|
||||
image::cmake-project/qtcreator-cmake-option.png[qtcmoption,pdfwidth=90%,scaledwidth=90%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
|
||||
[[base-project]]
|
||||
== Базовый проект
|
||||
|
||||
Проект, в котором выполнены приведённые в данном разделе действия,
|
||||
можно посмотреть https://git.246060.ru/f1x1t/cmlib-example-base[здесь]
|
||||
можно посмотреть https://git.246060.ru/f1x1t/myx-cmake-example-base[здесь]
|
||||
или сделать его копию командой:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-base
|
||||
git clone --recursive https://git.246060.ru/f1x1t/myx-cmake-example-base
|
||||
----
|
||||
|
||||
=== Инициализация проекта
|
||||
|
||||
Проект создаётся командой `myx-dev-git-init`. В качестве параметра можно
|
||||
указать git-сервер, на котором планируется сохранять проект, и имя каталога
|
||||
для проекта. Например:
|
||||
Проект создаётся командой `myx-dev-project`. Обязательно должен быть указан
|
||||
параметр `-i` для инициализации проекта, также можно указать git-сервер,
|
||||
с которого будут загружены типовые файлы, и имя каталога для проекта.
|
||||
Например:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
myx-dev-git-init -s git.246060.ru myx-cmake-example-base
|
||||
myx-dev-project -i -s git.246060.ru myx-cmake-example-base
|
||||
----
|
||||
|
||||
Во время инициализации проекта создаются некоторые типовые каталоги:
|
||||
@ -170,27 +198,18 @@ mkdir -p files/{etc,log,share,var}
|
||||
touch files/{etc,log,share,var}/.gitkeep
|
||||
----
|
||||
|
||||
а также автоматически создаётся типовой минимальный файл `CMakeLists.txt`,
|
||||
загружаются файл для форматирования исходных текстов
|
||||
на языке C++ `.uncrustify.cfg`, форматирования файлов CMake `.cmake-format.py`,
|
||||
типовой файл исключений для Git `.gitignore`, файл `.gitlab-ci.yml` для правил
|
||||
автоматической сборки проекта на сервере GitLab, файл `.clang-tidy` с правилами
|
||||
для анализатора исходных текстов `.clang-tidy` и файлы сценариев для выполнения
|
||||
автоматических действий в репозитории, которые устанавливаются в каталог `.git/hooks`.
|
||||
Автоматически создаётся типовой минимальный файл `CMakeLists.txt`,
|
||||
загружаются файл для форматирования исходных текстов автоматической
|
||||
сборки проекта на сервере GitLab, файл `.clang-tidy` с правилами
|
||||
для анализатора исходных текстов `.clang-tidy` и файлы сценариев
|
||||
для выполнения автоматических действий в репозитории, которые
|
||||
устанавливаются в каталог `.git/hooks`.
|
||||
|
||||
Отправить изменения в проекте на сервер и сделать ветку `master` основной
|
||||
(можно пропустить):
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
cd myx-cmake-example-base
|
||||
git remote add origin АДРЕС_РЕПОЗИТОРИЯ_НА_СЕРВЕРЕ
|
||||
git push -u origin master
|
||||
----
|
||||
|
||||
=== Базовые инструкции в CMake
|
||||
|
||||
В корневом каталоге проекта нужно создать файл `CMakeLists.txt`:
|
||||
В корневом каталоге проекта после выполнения команды `myx-dev-project`
|
||||
будет создан файл `CMakeLists.txt`:
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
@ -208,8 +227,8 @@ project(myx-cmake-example-base VERSION 0.2.0 LANGUAGES C CXX)
|
||||
https://semver.org/lang/ru/[семантического версионирования].
|
||||
|
||||
[[project-required-variables]]
|
||||
Для подключения функций для CMake из библиотеки MyxCMake, нужно добавить
|
||||
в файл `CMakeLists.txt` строки, содержащие обязательные переменные:
|
||||
Для подключения функций для CMake из библиотеки MyxCMake, нужно отредактировать
|
||||
в файле `CMakeLists.txt` строки, содержащие обязательные переменные:
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
@ -228,7 +247,7 @@ set(MYX_CMAKE_AUTHOR_EMAIL "mail@johndoe.com" CACHE STRING "")
|
||||
# Краткое описание проекта
|
||||
set(MYX_CMAKE_DESCRIPTION "Пример проекта: начало" CACHE STRING "")
|
||||
|
||||
find_package(MyxCMake 0.1.8 REQUIRED)
|
||||
find_package(MyxCMake 0.4.1 REQUIRED)
|
||||
----
|
||||
|
||||
Значения обязательных переменных, используемых библиотекой MyxCMake
|
||||
@ -241,14 +260,24 @@ find_package(MyxCMake 0.1.8 REQUIRED)
|
||||
git commit -m "Подключение библиотеки MyxCMake" CMakeLists.txt
|
||||
----
|
||||
|
||||
Чтобы проверить корректность подключения MyxCMake, можно выполнить команду:
|
||||
Чтобы проверить корректность подключения MyxCMake, можно выполнить команду
|
||||
(пути обязательно без пробелов!):
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
(mkdir -p _build && cd _build && cmake .. && make && echo OK)
|
||||
(cmake -B_build -H. && cmake --build _build && echo OK)
|
||||
----
|
||||
|
||||
Если последней строкой вывода будет `OK`, то настройка завершена верно.
|
||||
Если используется версия CMake новее `3.15`, можно использовать официально
|
||||
задокументированный набор аргументов для каталогов сборки и корня проекта:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
(cmake -B _build -S . && cmake --build _build && echo OK)
|
||||
----
|
||||
|
||||
Если последней строкой вывода будет `OK`, то CMake успешно проверил
|
||||
окружение для сборки
|
||||
|
||||
|
||||
== Проверка программного окружения
|
||||
@ -277,8 +306,8 @@ git commit -m "Подключение библиотеки MyxCMake" CMakeLists.
|
||||
----
|
||||
# Поиск библиотек с помощью pkgconfig
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(GSL REQUIRED gsl)
|
||||
pkg_check_modules(FFTW3 REQUIRED fftw3 >= 3.3.2)
|
||||
pkg_check_modules(GSL gsl REQUIRED)
|
||||
pkg_check_modules(FFTW3 fftw3>=3.3.2 REQUIRED)
|
||||
pkg_check_modules(UDEV udev)
|
||||
----
|
||||
|
||||
@ -294,7 +323,7 @@ sudo apt-get install pkg-config libgsl-dev libfftw3-dev
|
||||
|
||||
Если системная библиотека поставляется без файла описания для `pkg-config`
|
||||
или необходимо произвести более сложный поиск, например, включающий поиск
|
||||
исполняемого файла, то может быть написан специальный модуль для `CMake`,
|
||||
исполняемого файла, то может быть написан специальный модуль для CMake,
|
||||
который вызывается функцией `find_package`. Примеры вызова функции:
|
||||
|
||||
[source,cmake]
|
||||
@ -317,7 +346,7 @@ sudo apt-get install libxml2-dev curl libcurl-dev libboost-all-dev
|
||||
|
||||
На этапе конфигурирования проекта можно генерировать файлы, в которые будут записаны
|
||||
собранные значения параметров. Функция `myx_cmake_generate_private_config_header()`,
|
||||
из библиотеки MyxCMake создаёт файл `${CMAKE_BINARY_DIR}/include/myx_cmake_private_config.hpp`,
|
||||
из библиотеки MyxCMake создаёт файл `${CMAKE_BINARY_DIR}/include/myx_cmake_private_config_p.hpp`,
|
||||
в который записывается информация о имени и версии проекта, дате и типе сборки.
|
||||
|
||||
[source,cmake]
|
||||
@ -328,9 +357,9 @@ myx_cmake_generate_private_config_header()
|
||||
|
||||
== Автоматически генерируемый файл о состоянии проекта
|
||||
|
||||
Функция `myx_cmake_generate_git_info_header` библиотеки MyxCMake
|
||||
Функция `myx_cmake_generate_git_info_header()` библиотеки MyxCMake
|
||||
предоставляет возможность генерировать при каждой сборке проекта
|
||||
файл `${CMAKE_BINARY_DIR}/include/myx_cmake_git_info.hpp`,
|
||||
файл `${CMAKE_BINARY_DIR}/include/myx_cmake_git_info_p.hpp`,
|
||||
в который записывается информация о теге, текущей ветки и последнем
|
||||
коммите в ней.
|
||||
|
||||
@ -384,7 +413,7 @@ set(MYX_CMAKE_AUTHOR_EMAIL "mail@johndoe.com" CACHE STRING "")
|
||||
# Краткое описание проекта
|
||||
set(MYX_CMAKE_DESCRIPTION "Пример проекта: библиотека" CACHE STRING "")
|
||||
|
||||
find_package(MyxCMake REQUIRED)
|
||||
find_package(MyxCMake 0.4.1 REQUIRED)
|
||||
|
||||
# Автоматически генерируемый заголовочный файл
|
||||
myx_cmake_generate_private_config_header()
|
||||
@ -512,7 +541,7 @@ set(MYX_CMAKE_AUTHOR_EMAIL "mail@johndoe.com" CACHE STRING "")
|
||||
# Краткое описание проекта
|
||||
set(MYX_CMAKE_DESCRIPTION "Пример проекта: программа" CACHE STRING "")
|
||||
|
||||
find_package(MyxCMake REQUIRED)
|
||||
find_package(MyxCMake 0.4.1 REQUIRED)
|
||||
|
||||
# Boost
|
||||
set(Boost_USE_STATIC_LIBS ON)
|
||||
@ -557,8 +586,8 @@ install(TARGETS ${TRGT} COMPONENT main RUNTIME DESTINATION ${CMAKE_INSTALL_BINDI
|
||||
|
||||
[source,cpp]
|
||||
----
|
||||
#include <myx_cmake_git_info.hpp>
|
||||
#include <myx_cmake_private_config.hpp>
|
||||
#include <myx_cmake_git_info_p.hpp>
|
||||
#include <myx_cmake_private_config_p.hpp>
|
||||
|
||||
#include <iostream>
|
||||
#include <boost/range/counting_range.hpp>
|
||||
@ -589,6 +618,7 @@ int main( int argc, char* argv[] )
|
||||
----
|
||||
|
||||
|
||||
[[base-app-ext-project]]
|
||||
=== Подключение внешнего проекта
|
||||
|
||||
Проект, использующий для сборки внешний проект, реализован на основе проектов
|
||||
@ -638,18 +668,18 @@ set(MYX_CMAKE_AUTHOR_EMAIL "mail@johndoe.com" CACHE STRING "")
|
||||
# Краткое описание проекта
|
||||
set(MYX_CMAKE_DESCRIPTION "Пример проекта: программа с поключенной библиотекой" CACHE STRING "")
|
||||
|
||||
find_package(MyxCMake REQUIRED)
|
||||
find_package(MyxCMake 0.4.1 REQUIRED)
|
||||
|
||||
# Подключение внешних проектов
|
||||
include(ExternalProject)
|
||||
|
||||
ExternalProject_Add(extlib <1>
|
||||
ExternalProject_Add(extlib # <1>
|
||||
EXCLUDE_FROM_ALL TRUE
|
||||
SOURCE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/myx-cmake-example-library <2>
|
||||
INSTALL_DIR ${CMAKE_BINARY_DIR} <3>
|
||||
SOURCE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/myx-cmake-example-library # <2>
|
||||
INSTALL_DIR ${CMAKE_BINARY_DIR} # <3>
|
||||
DOWNLOAD_COMMAND ""
|
||||
BUILD_BYPRODUCTS <INSTALL_DIR>/lib/libmyx-cmake-example-library.a
|
||||
CMAKE_ARGS ${MYX_CMAKE_EXTERNAL_PROJECT_ARGS} -DBUILD_MYX_CMAKE_EXAMPLE_LIBRARY_SHARED=OFF <4>
|
||||
CMAKE_ARGS ${MYX_CMAKE_EXTERNAL_PROJECT_ARGS} -DBUILD_MYX_CMAKE_EXAMPLE_LIBRARY_SHARED=OFF # <4>
|
||||
)
|
||||
|
||||
# Исходные тексты программы
|
||||
@ -720,12 +750,12 @@ int main( int argc, char* argv[] )
|
||||
Пример консольного приложения на Qt5 с поддержкой локализации основан
|
||||
на проекте <<base-app-project,базового приложения>>.
|
||||
Исходные тексты содержат комментарии, объясняющие назначение используемых функций.
|
||||
Проект можно посмотреть https://git.246060.ru/f1x1t/myx-cmake-example-app-qt5-con[здесь]
|
||||
Проект можно посмотреть https://git.246060.ru/f1x1t/myx-cmake-example-qt5-console[здесь]
|
||||
или сделать его копию командой:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-app-qt5-con
|
||||
git clone --recursive https://git.246060.ru/f1x1t/myx-cmake-example-qt5-console
|
||||
----
|
||||
|
||||
<<<
|
||||
@ -758,11 +788,11 @@ set(MYX_CMAKE_AUTHOR_EMAIL "mail@johndoe.com" CACHE STRING "")
|
||||
# Краткое описание проекта
|
||||
set(MYX_CMAKE_DESCRIPTION "Пример проекта: консольная программа Qt5" CACHE STRING "")
|
||||
|
||||
find_package(MyxCMake REQUIRED)
|
||||
find_package(MyxCMake 0.4.1 REQUIRED)
|
||||
|
||||
# Qt5
|
||||
find_package(Qt5 COMPONENTS Core REQUIRED) <1>
|
||||
find_package(Qt5Core COMPONENTS Private REQUIRED) <2>
|
||||
find_package(Qt5 COMPONENTS Core REQUIRED) # <1>
|
||||
find_package(Qt5Core COMPONENTS Private REQUIRED) # <2>
|
||||
|
||||
# Исходные тексты программы
|
||||
add_subdirectory(src/myx-cmake-example-qt5-console)
|
||||
@ -857,12 +887,15 @@ set(MYX_CMAKE_AUTHOR_EMAIL "mail@johndoe.com" CACHE STRING "")
|
||||
# Краткое описание проекта
|
||||
set(MYX_CMAKE_DESCRIPTION "Пример проекта: графическая программа Qt5" CACHE STRING "")
|
||||
|
||||
find_package(MyxCMake REQUIRED)
|
||||
find_package(MyxCMake 0.4.1 REQUIRED)
|
||||
|
||||
# Qt5
|
||||
find_package(Qt5Core COMPONENTS Private REQUIRED)
|
||||
find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
|
||||
|
||||
# Автоматически генерируемый заголовочный файл
|
||||
myx_cmake_generate_private_config_header()
|
||||
|
||||
# Исходные тексты программы
|
||||
add_subdirectory(src/myx-cmake-example-qt5-gui)
|
||||
----
|
||||
@ -911,9 +944,16 @@ qt5_wrap_ui(TRGT_ui_h ${TRGT_ui})
|
||||
# Правило для автоматической генерации препроцессором moc
|
||||
qt5_wrap_cpp(TRGT_moc_cpp ${TRGT_moc_hpp})
|
||||
|
||||
# Поиск строк для локализации в файлах, перечисленных в ${TRGT_cpp} ${TRGT_ui}
|
||||
# Создание и обновление файлов переводов в каталоге ${CMAKE_SOURCE_DIR}/l10n
|
||||
# Интеграция переводов в исполняемый файл для подключения классом QTranslator
|
||||
myx_cmake_qt5_translation(TRGT_qrc_cpp
|
||||
OUTPUT_DIR ${CMAKE_SOURCE_DIR}/l10n
|
||||
BASE_NAME ${TRGT}
|
||||
SOURCES ${TRGT_cpp} ${TRGT_ui}
|
||||
LANGUAGES ru_RU)
|
||||
|
||||
# Правило для автоматической генерации препроцессором qrc
|
||||
# (обязательно после вызова функции qt5_translation, если она есть,
|
||||
# так как она добавляет свои файлы к списку ресурсов)
|
||||
qt5_add_resources(TRTG_qrc_cpp ${TRGT_qrc})
|
||||
|
||||
# Функция для создания цели, результатом которой будет сборка приложения
|
||||
@ -1028,15 +1068,24 @@ TestWindow::~TestWindow() = default;
|
||||
|
||||
[source,cpp]
|
||||
----
|
||||
#include "myx_cmake_private_config_p.hpp"
|
||||
#include "test_window.hpp"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QIcon>
|
||||
#include <QTranslator>
|
||||
|
||||
int main( int argc, char** argv )
|
||||
{
|
||||
QApplication app( argc, argv );
|
||||
|
||||
// Подключение переводов в зависимости от текущей локали
|
||||
auto* translator = new QTranslator( QApplication::instance() );
|
||||
if ( translator->load( QLocale(), MYX_CMAKE_PROJECT_NAME, QStringLiteral( "_" ), QStringLiteral( ":/qm" ) ) )
|
||||
{
|
||||
QApplication::installTranslator( translator );
|
||||
}
|
||||
|
||||
// Установка иконки для программы
|
||||
QApplication::setWindowIcon( QIcon( ":/icon/icon.png" ) );
|
||||
|
||||
@ -1047,24 +1096,47 @@ int main( int argc, char** argv )
|
||||
}
|
||||
----
|
||||
|
||||
Для работы с файлами переводов создаётся цель `l10n`, которую нужно вызывать
|
||||
при появлении новых строк. После первого выполнения команды `make l10n` в корневом
|
||||
каталоге проекта будет создан подкаталог `l10n`, в котором появится файл
|
||||
с расширением `.ts`. Его можно открыть и отредактировать программой `linguist`,
|
||||
входящей в состав пакета `qttools5-dev-tools`. При следующей сборке программы
|
||||
переводы будут интегрированы в исполняемый файл. В примере показано, как экземпляр
|
||||
класса `QTranslator` загружает файл переводов и подключает его для отображения
|
||||
строк в программе.
|
||||
|
||||
|
||||
== Дополнительные возможности
|
||||
|
||||
Библиотека MyxCMake содержит шаблонные функции для использования
|
||||
в программных проектах. Цели для автоматического форматирования и статического
|
||||
анализа исходных текстов создаются автоматически при вызове функции
|
||||
`myx_cmake_common_target_properties` из библиотеки MyxCMake.
|
||||
`myx_cmake_common_target_properties()` из библиотеки MyxCMake.
|
||||
Такие функции как анализ покрытия, динамический анализ, сборка из
|
||||
единого компилируемого файла можно подключить только после перечисления
|
||||
подключаемых библиотек. Для решения этой задачи используется функция
|
||||
`myx_cmake_common_target_properties_post_link()`, которую необходимо вызывать
|
||||
после всех вызовов функции `target_link_libraries()`.
|
||||
|
||||
Пример проекта, демонстрирующего перечисленные ниже возможности можно посмотреть
|
||||
https://git.246060.ru/f1x1t/myx-cmake-example-features[здесь]
|
||||
или сделать его копию командой:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
git clone --recursive https://git.246060.ru/f1x1t/myx-cmake-example-features
|
||||
----
|
||||
|
||||
=== Форматирование исходных текстов
|
||||
|
||||
Функция `myx_cmake_common_target_properties` создаёт для файлов исходных текстов,
|
||||
формирующих цель, дополнительные цели `${target}-format-sources-uncrustify`
|
||||
для форматирования исходных текстов на языке C{plus}{plus} в соответствии с правилами,
|
||||
перечисленными в файле `.uncrustify.cfg`, находящимся в корне проекта, а также
|
||||
`${target}-format-sources-dos2unix` для преобразования переводов строк в
|
||||
файлах к стандарту, принятому в Unix. Для проекта создаётся цель `myx-cmake-format-sources`,
|
||||
которая объединяет все цели, выполняющие форматирование исходных текстов.
|
||||
Функция `myx_cmake_common_target_properties()` создаёт для файлов, формирующих цель,
|
||||
дополнительные цели `${target}-format-sources-uncrustify` для форматирования
|
||||
исходных текстов на языке C{plus}{plus} в соответствии с правилами,
|
||||
перечисленными в файле `.uncrustify.cfg`, находящимся в корне проекта,
|
||||
а также `${target}-format-sources-dos2unix` для преобразования переводов
|
||||
строк в файлах к стандарту, принятому в Unix. Для проекта создаётся цель
|
||||
`myx-cmake-format-sources`, которая объединяет все цели, выполняющие
|
||||
форматирование исходных текстов.
|
||||
|
||||
IMPORTANT: Настройка правил форматирования помогает другим разработчикам
|
||||
придерживаться вашего стиля программирования и отправлять изменения в ваш
|
||||
@ -1102,7 +1174,7 @@ https://www.viva64.com/ru/pvs-studio[PVS-Studio].
|
||||
[[analyze-clazy]]
|
||||
==== clazy
|
||||
|
||||
Функция `myx_cmake_common_target_properties` создаёт для файлов исходных
|
||||
Функция `myx_cmake_common_target_properties()` создаёт для файлов исходных
|
||||
текстов, формирующих цель, дополнительную цель `${target}-analyze-clazy`
|
||||
для проверки исходных текстов анализатором `clang`.
|
||||
Для всего проекта создаётся цель `myx-cmake-analyze-clazy`, которая
|
||||
@ -1119,7 +1191,7 @@ make myx-cmake-analyze-clazy
|
||||
[[analyze-clang-check]]
|
||||
==== Clang Static Analyzer
|
||||
|
||||
Функция `myx_cmake_common_target_properties` создаёт для файлов исходных
|
||||
Функция `myx_cmake_common_target_properties()` создаёт для файлов исходных
|
||||
текстов, формирующих цель, дополнительную цель `${target}-analyze-clang-check`
|
||||
для проверки исходных текстов анализатором `clang-check`.
|
||||
Для всего проекта создаётся цель `myx-cmake-analyze-clang-check`, которая
|
||||
@ -1137,7 +1209,7 @@ make myx-cmake-analyze-clang-check
|
||||
[[analyze-clang-tidy]]
|
||||
==== Clang Tidy
|
||||
|
||||
Функция `myx_cmake_common_target_properties` создаёт для файлов исходных
|
||||
Функция `myx_cmake_common_target_properties()` создаёт для файлов исходных
|
||||
текстов, формирующих цель, дополнительную цель `${target}-analyze-clang-tidy`
|
||||
для проверки исходных текстов анализатором `clang-tidy`.
|
||||
Для всего проекта создаётся цель `myx-cmake-analyze-clang-tidy`, которая
|
||||
@ -1155,7 +1227,7 @@ make myx-cmake-analyze-clang-tidy
|
||||
[[analyze-pvs-studio]]
|
||||
==== PVS-Studio
|
||||
|
||||
Функция `myx_cmake_common_target_properties` создаёт для всего проекта
|
||||
Функция `myx_cmake_common_target_properties()` создаёт для всего проекта
|
||||
цель `myx-cmake-analyze-clang-tidy` для проверки исходных текстов
|
||||
анализатором `pvs-studio-analyzer`.
|
||||
|
||||
@ -1179,16 +1251,17 @@ IMPORTANT: Редактирование кода в автоматическом
|
||||
==== clazy
|
||||
|
||||
Программа clazy может преобразовывать в программах, использующих Qt,
|
||||
подключения сигналов и слотов старого типа, производить замену старых ключевых
|
||||
слов, подставлять оптимизированные способы для инициализации строк,
|
||||
исправлять циклы и передачу аргументов в функции для избежания лишних копирований.
|
||||
подключения сигналов и слотов старого типа, производить замену старых
|
||||
ключевых слов, подставлять оптимизированные способы для инициализации
|
||||
строк, исправлять циклы и передачу аргументов в функции для избежания
|
||||
лишних копирований.
|
||||
|
||||
Для включения автоматического исправления нужно в настройках сборки проекта
|
||||
menu:Проекты[Настройки сборки] выбрать цель `myx-cmake-analyze-clazy`:
|
||||
|
||||
[.text-center]
|
||||
.Выбор цели
|
||||
image::cmake-fixes/clazy1.png[clazyfix1,pdfwidth=90%,scaledwidth=90%,align="center"]
|
||||
image::cmake-project/clazy1.png[clazyfix1,pdfwidth=90%,scaledwidth=90%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
@ -1197,22 +1270,12 @@ btn:[Применить изменения], а затем скомпилиро
|
||||
|
||||
[.text-center]
|
||||
.Разрешение автозамены
|
||||
image::cmake-fixes/clazy2.png[clazyfix2,pdfwidth=90%,scaledwidth=90%,align="center"]
|
||||
image::cmake-project/clazy2.png[clazyfix2,pdfwidth=90%,scaledwidth=90%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
Пример проекта, в котором показаны возможности `clazy`, можно посмотреть
|
||||
https://git.246060.ru/f1x1t/cmlib-example-clazy-fix[здесь]. Содержание
|
||||
изменений, произведённых автоматически, можно увидеть
|
||||
https://git.246060.ru/f1x1t/cmlib-example-clazy-fix/commit/81ed1e72b14f17bac0a39ab41bc3ba0ba2bdcb8e?style=split[здесь].
|
||||
Результат автоматической правки исходных текстов можно посмотреть с помощью git (`git diff`).
|
||||
|
||||
Можно сделать копию репозитория и выполнить правки в автоматическом режиме
|
||||
самостоятельно:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-clazy-fix
|
||||
----
|
||||
|
||||
==== Clang-Tidy
|
||||
|
||||
@ -1221,11 +1284,11 @@ git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-clazy-fix
|
||||
использовать Clang-Tidy после clazy.
|
||||
|
||||
Для включения автоматического исправления нужно в настройках сборки проекта
|
||||
menu:Проекты[Настройки сборки] выбрать цель `clang-tidy-check`:
|
||||
menu:Проекты[Настройки сборки] выбрать цель `myx-cmake-analyze-clang-tidy`:
|
||||
|
||||
[.text-center]
|
||||
.Выбор цели
|
||||
image::cmake-fixes/clang-tidy1.png[clangtidyfix1,pdfwidth=90%,scaledwidth=90%,align="center"]
|
||||
image::cmake-project/clang-tidy1.png[clangtidyfix1,pdfwidth=90%,scaledwidth=90%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
@ -1234,10 +1297,11 @@ btn:[Применить изменения], а затем скомпилиро
|
||||
|
||||
[.text-center]
|
||||
.Разрешение автозамены
|
||||
image::cmake-fixes/clang-tidy2.png[clangtidyfix2,pdfwidth=90%,scaledwidth=90%,align="center"]
|
||||
image::cmake-project/clang-tidy2.png[clangtidyfix2,pdfwidth=90%,scaledwidth=90%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
Результат автоматической правки исходных текстов можно посмотреть с помощью git (`git diff`).
|
||||
|
||||
=== Динамический анализ программы
|
||||
|
||||
@ -1249,12 +1313,14 @@ image::cmake-fixes/clang-tidy2.png[clangtidyfix2,pdfwidth=90%,scaledwidth=90%,al
|
||||
таких анализаторов находится https://github.com/google/sanitizers/wiki[здесь].
|
||||
|
||||
Для обеспечения возможности подключения динамического анализа к проекту
|
||||
нужно выполнить функцию (обязательно после подключения всех библиотек):
|
||||
нужно выполнить функцию `myx_cmake_common_target_properties_post_link()`
|
||||
(обязательно после подключения всех библиотек):
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
# Подключение настроек для динамического анализа программы
|
||||
add_sanitizers(${TRGT})
|
||||
# Дополнительные функции для цели ${TRGT}.
|
||||
# Вызов обязательно после всех функций target_link_libraries
|
||||
myx_cmake_common_target_properties_post_link(${TRGT})
|
||||
----
|
||||
|
||||
Подключение анализатора осуществляется включением опций при запуске
|
||||
@ -1279,6 +1345,28 @@ CMake для генерации сборочных файлов. Некотор
|
||||
преобразования типов с плавающей точкой, ведущих к переполнению результирующей переменной
|
||||
|===
|
||||
|
||||
Для проверки возможности динамической отладки можно в перечне опций включить `SANITIZE_ADDRESS`,
|
||||
нажать кнопку btn:[Применить изменения], а затем скомпилировать проект kbd:[Ctrl+B].
|
||||
После запуска программы `myx-cmake-example-features` будет выведено сообщение об утечке памяти,
|
||||
показывающее, что объект типа `QFile` не был удалён.
|
||||
|
||||
[source,text]
|
||||
----
|
||||
==322360==ERROR: LeakSanitizer: detected memory leaks
|
||||
|
||||
Indirect leak of 256 byte(s) in 1 object(s) allocated from:
|
||||
#0 0x7fbe8558c947 in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10f947)
|
||||
#1 0x7fbe850efeb4 in QFile::QFile() (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x1bbeb4)
|
||||
#2 0x7fbe84a1d0b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x270b2)
|
||||
|
||||
Indirect leak of 16 byte(s) in 1 object(s) allocated from:
|
||||
#0 0x7fbe8558c947 in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10f947)
|
||||
#1 0x56089352a542 in main ../../src/myx-cmake-example-features/main.cpp:41
|
||||
#2 0x7fbe84a1d0b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x270b2)
|
||||
|
||||
SUMMARY: AddressSanitizer: 272 byte(s) leaked in 2 allocation(s).
|
||||
----
|
||||
|
||||
|
||||
=== Анализ покрытия кода
|
||||
|
||||
@ -1286,51 +1374,59 @@ CMake для генерации сборочных файлов. Некотор
|
||||
для каждого оператора в программе используется программа
|
||||
https://gcc.gnu.org/onlinedocs/gcc/Gcov.html[Gcov],
|
||||
входящая в состав компилятора https://gcc.gnu.org[GCC].
|
||||
Для генерирования отчётов в виде HTML-страниц используется
|
||||
программа `lcov`.
|
||||
|
||||
Для обеспечения возможности подключения анализа покрытия кода к проекту
|
||||
нужно выполнить функцию (обязательно после подключения всех библиотек):
|
||||
нужно выполнить функцию `myx_cmake_common_target_properties_post_link()`
|
||||
(обязательно после подключения всех библиотек):
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
# Подключение возможности использования утилиты Gcov
|
||||
# для исследования покрытия кода
|
||||
add_code_coverage(${TRGT})
|
||||
# Дополнительные функции для цели ${TRGT}.
|
||||
# Вызов обязательно после всех функций target_link_libraries
|
||||
myx_cmake_common_target_properties_post_link(${TRGT})
|
||||
----
|
||||
|
||||
Подключение осуществляется включением опции `ENABLE_CODE_COVERAGE`
|
||||
Анализ покрытия кода работает только для файлов, скомпилированных GCC.
|
||||
Во избежание ошибок его можно явно включить, используя при вызове CMake
|
||||
флаги `-DCMAKE_C_COMPILER=gcc` и `-DCMAKE_CXX_COMPILER=g++`.
|
||||
|
||||
Подключение осуществляется включением опции `MYX_CMAKE_CODE_COVERAGE`
|
||||
при запуске CMake для генерации сборочных файлов. В результате будут
|
||||
созданы две дополнительные цели `coverage-${TRGT}` для сбора статистики
|
||||
после работы программы и `coverage-report-${TRGT}` для её вывода
|
||||
созданы две дополнительные цели `${TRGT}-coverage` для сбора статистики
|
||||
после работы программы и `${TRGT}-coverage-report` для её вывода
|
||||
в виде HTML-страниц.
|
||||
|
||||
Пример анализа покрытия кода на примере проекта `cmlib-example-app-features`:
|
||||
Пример анализа покрытия кода для проекта `myx-cmake-example-features`:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
mkdir -p _build/debug
|
||||
cd _build/debug
|
||||
cmake ../.. -DENABLE_CODE_COVERAGE=ON -DCMAKE_BUILD_TYPE=Debug
|
||||
cmake -B_build/cov -H. -DMYX_CMAKE_CODE_COVERAGE=ON -DCMAKE_BUILD_TYPE=Debug
|
||||
cd _build/cov
|
||||
make
|
||||
bin/cmlib-example-app-features
|
||||
make coverage-cmlib-example-app-features
|
||||
make coverage-report-cmlib-example-app-features
|
||||
bin/myx-cmake-example-features
|
||||
make myx-cmake-example-features-coverage
|
||||
make myx-cmake-example-features-coverage-report
|
||||
----
|
||||
|
||||
После выполнения этих команд в каталоге `report-cmlib-example-app-features`
|
||||
будет сформирован отчёт в виде HTML-страниц.
|
||||
После выполнения этих команд в каталоге `myx-cmake-example-features-coverage-html`
|
||||
будет сформирован отчёт в виде HTML-страниц, в котором будет показано,
|
||||
что функция `int unused(int)` не вызывалась.
|
||||
|
||||
|
||||
=== Профилирование кода
|
||||
|
||||
Библиотека CMLib предоставляет вариант сборки для профилирования кода,
|
||||
Библиотека MyxCMake предоставляет вариант сборки для профилирования кода,
|
||||
для которого можно сгенерировать сборочные файлы, присвоив переменной
|
||||
`CMAKE_BUILD_TYPE` значение `Profile`:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
mkdir -p _build/profile
|
||||
cmake -B_build/profile -H. -DCMAKE_BUILD_TYPE=Profile
|
||||
cd _build/profile
|
||||
cmake ../.. -DCMAKE_BUILD_TYPE=Profile
|
||||
make
|
||||
bin/myx-cmake-example-features
|
||||
----
|
||||
|
||||
По окончании работы исполняемого файла будет сгенерирован файл
|
||||
@ -1339,43 +1435,37 @@ cmake ../.. -DCMAKE_BUILD_TYPE=Profile
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
./cmlib-example-app-features
|
||||
gprof -b cmlib-example-app-features gmon.out > analysis-tree.txt
|
||||
gprof -b -p cmlib-example-app-features gmon.out > analysis-flat.txt
|
||||
gprof -b bin/myx-cmake-example-features gmon.out > profiling-tree.txt
|
||||
gprof -b -p bin/myx-cmake-example-features gmon.out > profiling-flat.txt
|
||||
----
|
||||
|
||||
Результаты профилирования будут записаны в файлы `profiling-tree.txt`
|
||||
и `profiling-flat.txt`.
|
||||
|
||||
|
||||
=== Ускорение компиляции
|
||||
|
||||
Для ускорения компиляции используется сторонний модуль
|
||||
https://github.com/sakra/cotire[cotire], который автоматизирует
|
||||
использование предварительно откомпилированных заголовков и
|
||||
организует пакетный режим обработки исходных файлов в генератора.
|
||||
использование предварительно откомпилированных заголовочных файлов и
|
||||
организует пакетный режим обработки исходных файлов.
|
||||
Аналогичные функции встроены в CMake, начиная с версии 3.16.
|
||||
|
||||
Для обеспечения возможностей, предоставляемых модулем cotire,
|
||||
нужно выполнить функцию (обязательно после подключения всех библиотек):
|
||||
нужно выполнить функцию `myx_cmake_common_target_properties_post_link()`
|
||||
(обязательно после подключения всех библиотек):
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
# Подключение возможности включения пакетного режима обработки
|
||||
# исходных файлов в генераторах для ускорения сборки
|
||||
cotire(${TRGT})
|
||||
# Дополнительные функции для цели ${TRGT}.
|
||||
# Вызов обязательно после всех функций target_link_libraries
|
||||
myx_cmake_common_target_properties_post_link(${TRGT})
|
||||
----
|
||||
|
||||
В результате будут созданы цели с суффиксом `_unity`, при сборки
|
||||
которых будут применяться приведённые выше методы ускорения.
|
||||
|
||||
Пример использования cotire для ускорения сборки
|
||||
на примере проекта `cmlib-example-app-features`:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
mkdir -p _build/debug
|
||||
cd _build/debug
|
||||
cmake ../..
|
||||
make all_unity
|
||||
----
|
||||
FIXME
|
||||
|
||||
|
||||
=== Документирование кода
|
||||
|
||||
@ -1388,61 +1478,33 @@ make all_unity
|
||||
sudo apt-get install doxygen
|
||||
----
|
||||
|
||||
Пример комментария:
|
||||
|
||||
[source,c++]
|
||||
----
|
||||
/**
|
||||
* @brief Базовый класс
|
||||
*/
|
||||
class Base {
|
||||
public:
|
||||
/**
|
||||
* @brief Конструктор
|
||||
*/
|
||||
Base();
|
||||
/**
|
||||
* @brief Деструктор
|
||||
*/
|
||||
~Base();
|
||||
/**
|
||||
* @brief Вычисление квадратного корня
|
||||
* @param value Входное значение
|
||||
* @return Квадратный корень от value
|
||||
*/
|
||||
double sqrt(double value);
|
||||
};
|
||||
----
|
||||
|
||||
Поддержка автоматической генерации документации реализована
|
||||
в функциях библиотеки CMLib `add_doxygen_target` и
|
||||
`add_breathe_target`, которые необходимо вызвать в основном
|
||||
файле `CMakeLists.txt` проекта.
|
||||
Пример комментариев для исходных текстов можно посмотреть в проекте
|
||||
`myx-cmake-example-features`. Поддержка автоматической генерации
|
||||
документации реализована в функции библиотеки MyxCMake `myx_cmake_doc_doxygen()`,
|
||||
которую необходимо вызвать в основном файле `CMakeLists.txt` проекта.
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
# Документация
|
||||
add_doxygen_target(doc-doxygen LATEX YES HTML YES)
|
||||
add_breathe_target(doc-breathe)
|
||||
myx_cmake_doc_doxygen(LATEX YES HTML YES)
|
||||
----
|
||||
|
||||
В результате будут добавлены цели `doc-doxygen` и `doc-breathe`,
|
||||
которые можно использовать после конфигурирования проекта:
|
||||
В результате будет добавлена цель `myx-cmake-doc-doxygen`,
|
||||
которую можно использовать после конфигурирования проекта:
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
make doc-doxygen
|
||||
make doc-breathe
|
||||
make myx-cmake-doc-doxygen
|
||||
----
|
||||
|
||||
Шаблоны для комментирования файлов, классов и функций
|
||||
можно автоматически расставить в файлах исходных кодов
|
||||
исполнением цели `doc-add-comments` при наличии установленной
|
||||
программы `uncrustify`:
|
||||
Шаблоны для комментирования файлов, классов и функций можно
|
||||
автоматически расставить в файлах исходных кодов с помощью цели
|
||||
`myx-cmake-doc-doxygen-append-comments`, которая доступна
|
||||
при наличии установленной программы `uncrustify`:
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
make doc-add-comments
|
||||
make myx-cmake-doc-doxygen-append-comments
|
||||
----
|
||||
|
||||
== Удаление установленных файлов
|
||||
@ -1452,18 +1514,21 @@ make doc-add-comments
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
cd _build
|
||||
make install
|
||||
make uninstall
|
||||
cmake -B_build -H. -DCMAKE_INSTALL_PREFIX=_output # <1>
|
||||
cmake --build _build -t install # <2>
|
||||
cmake --build _build -t uninstall # <3>
|
||||
----
|
||||
<1> Конфигурирование проекта (каталог сборки `_build`, каталог для установки `_output`)
|
||||
<2> Компиляция проекта и установка в каталог `_output`
|
||||
<3> Удаление файлов, установленных в каталог `_output`, а также пустых каталогов
|
||||
|
||||
|
||||
== Архивирование проекта и создание пакетов
|
||||
|
||||
Стандартный модуль `CPack` предназначен для архивирования исходных
|
||||
текстов проекта и создания пакетов для установки в целевую систему.
|
||||
Необходимые переменные устанавливаются в начале файла `CMakeLists.txt`
|
||||
<<project-required-variables,см. выше>>.
|
||||
Переменные, необходимые для создания пакетов и архивов, устанавливаются
|
||||
в начале файла `CMakeLists.txt` <<project-required-variables,см. выше>>.
|
||||
|
||||
Библиотека MyxCMake предоставляет возможность стандартного разбиения
|
||||
на пакеты в соответствии с критериями, приведёнными в таблице.
|
||||
@ -1479,46 +1544,41 @@ make uninstall
|
||||
|===
|
||||
|
||||
Принадлежность устанавливаемого файла к компоненту определяется с помощью
|
||||
параметра `COMPONENT` функции `install`. В компонент `main` необходимо
|
||||
помещать файлы для установки на целевую систему (исполняемые файлы,
|
||||
файлы настроек, файлы данных, разделяемые библиотеки), в компоненты `dev`
|
||||
и `static` --- для установки на систему для разработки (заголовочные
|
||||
параметра `COMPONENT` функции `install()`. В компоненте `main` необходимо
|
||||
перечислить файлы для установки на целевую систему (исполняемые файлы,
|
||||
файлы настроек, файлы данных, разделяемые библиотеки), в компонентах
|
||||
`dev` и `static` --- для установки на систему для разработки (заголовочные
|
||||
файлы, статические библиотеки). Пример включения устанавливаемых файлов
|
||||
в компоненты можно посмотреть
|
||||
https://git.246060.ru/f1x1t/myxlib/src/branch/master/src/myx/base/CMakeLists.txt#L46-L54[здесь].
|
||||
https://git.246060.ru/f1x1t/myxlib/src/branch/v2/src/myx/core/CMakeLists.txt#L24-L26[здесь].
|
||||
Имена компонентов обязательно должны быть в нижнем регистре.
|
||||
|
||||
По умолчанию цель для упаковки исходных текстов называется `package_source`,
|
||||
цель для создания общего архива скомпилированного проекта --- `package`,
|
||||
цель для создания пакетов в формате Debian --- `deb`.
|
||||
|
||||
Примера работы с архивированием можно сделать копию репозитория
|
||||
библиотеки https://git.246060.ru/f1x1t/myxlib[MyXLib]:
|
||||
Пример работы с архивированием на основе репозитория библиотеки
|
||||
https://git.246060.ru/f1x1t/myxlib[MyXLib]:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
git clone --recursive https://git.246060.ru/f1x1t/myxlib
|
||||
git clone --recursive https://git.246060.ru/f1x1t/myxlib -b v2
|
||||
----
|
||||
|
||||
Дальнейшие шаги:
|
||||
В корневом каталоге проекта нужно выполнить команды:
|
||||
|
||||
[source,shell]
|
||||
----
|
||||
cd myxlib # <1>
|
||||
mkdir -p _build/debug # <2>
|
||||
cd _build/debug # <3>
|
||||
cmake ../.. -DMYXLIB_BUILD_LIBRARIES=ON -DMYXLIB_BUILD_EXAMPLES=ON # <4>
|
||||
make -j4 # <5>
|
||||
make doc-doxygen # <6>
|
||||
make package # <7>
|
||||
make package_source # <8>
|
||||
make deb # <9>
|
||||
cmake -В_build/release -H. -DMYXLIB_BUILD_LIBRARIES=ON -DMYXLIB_BUILD_EXAMPLES=ON -DCMAKE_INSTALL_PREFIX=_output # <1>
|
||||
cmake --build _build/release -t install -- -j4 # <2>
|
||||
cmake --build _build/release -t doc-doxygen # <3>
|
||||
cmake --build _build/release -t package # <4>
|
||||
cmake --build _build/release -t package_source # <5>
|
||||
cmake --build _build/release -t deb # <6>
|
||||
----
|
||||
<1> Перейти в каталог проекта
|
||||
<2> Создать каталог для сборки проекта
|
||||
<3> Перейти в каталог для сборки проекта
|
||||
<4> Создать конфигурацию для сборки проекта
|
||||
<5> Скомпилировать проект
|
||||
<6> Сгенерировать документацию
|
||||
<7> Создать архив с результатами компиляции `myx_amd64_0.4.0.tar.xz`
|
||||
<8> Создать архив с исходными текстами `myx-0.4.0.tar.xz`
|
||||
<9> Создать пакеты в формате Debian
|
||||
<1> Создание конфигурации для сборки проекта
|
||||
<2> Компиляция проекта
|
||||
<3> Генерирование документации
|
||||
<4> Создание архива с результатами компиляции `myx_amd64_0.4.1.tar.xz`
|
||||
<5> Создание архива с исходными текстами `myx-0.4.1.tar.xz`
|
||||
<6> Создание пакетов в формате Debian
|
||||
|
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 51 KiB |
BIN
wiki/images/cmake-project/clang-tidy1.png
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
wiki/images/cmake-project/clang-tidy2.png
Normal file
After Width: | Height: | Size: 167 KiB |
BIN
wiki/images/cmake-project/clazy1.png
Normal file
After Width: | Height: | Size: 90 KiB |
BIN
wiki/images/cmake-project/clazy2.png
Normal file
After Width: | Height: | Size: 166 KiB |
BIN
wiki/images/cmake-project/qtcreator-cmake-option.png
Normal file
After Width: | Height: | Size: 177 KiB |