Обновление

This commit is contained in:
Andrei Astafev 2021-06-08 11:22:28 +03:00
parent 8639788c93
commit 7505316c2c
2 changed files with 157 additions and 64 deletions

View File

@ -21,15 +21,13 @@ include::{l10ndir}/{lang}.adoc[]
│ ├── debug
│ │ ├── bin
│ │ ├── etc
│ │ ├── files
│ │ │ ├── data
│ │ │ ├── lib
│ │ │ └── log
│ │ ├── include
│ │ └── lib
│ │ ├── lib
│ │ ├── log
│ │ ├── share
│ │ └── var
│ └── release
├── .git
├── .gitlab-ci
├── cmake
│ ├── cmlib
│ ├── doc
@ -39,10 +37,10 @@ include::{l10ndir}/{lang}.adoc[]
│ └── generators
├── doc
├── files
│ ├── data
│ ├── etc
│ ├── lib
│ └── log
│ ├── log
│ ├── share
│ └── var
├── l10n
├── src
│ ├── app
@ -61,14 +59,13 @@ include::{l10ndir}/{lang}.adoc[]
|`_build/debug` | Результаты компиляции в режиме отладки
|`_build/debug/bin` | Исполняемые файлы
|`_build/debug/etc` | Символическая ссылка на каталог `cmex/files/etc`
|`_build/debug/files/data` | Символическая ссылка на каталог `cmex/files/data`
|`_build/debug/files/lib` | Символическая ссылка на каталог `cmex/files/lib`
|`_build/debug/files/log` | Символическая ссылка на каталог `cmex/files/log`
|`_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/release` | Результаты компиляции в режиме выпуска (иерархия аналогична `debug`)
|`.git` | Системные файлы репозитория git
|`.gitlab.ci` | Шаблон правил для автоматической сборки на сервере Gitlab
|`.git` | Системные файлы репозитория Git
|`cmake` | Файлы с дополнительными функциями для CMake
|`cmake/cmlib` | Библиотека функций для CMake
|`cmake/doc` | Правила для автоматической генерации документации
@ -79,9 +76,9 @@ include::{l10ndir}/{lang}.adoc[]
|`doc` | Документация для проекта
|`files` | Каталог для дополнительных файлов
|`files/etc` | Каталог для файлов настроек проекта
|`files/data` | Каталог для неизменяемых файлов
|`files/lib` | Каталог для изменяемых файлов
|`files/log` | Каталог для журналов
|`files/share` | Каталог для неизменяемых файлов
|`files/var` | Каталог для изменяемых файлов
|`l10n` | Файлы переводов
|`src` | Исходные тексты
|`src/app` | Исходные тексты программы
@ -115,7 +112,7 @@ git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-base
=== Инициализация подмодулей
Для начала нужно создать каталог для проекта, перейти в него и
инициализировать репозиторий git:
инициализировать репозиторий:
[source,sh]
----
@ -133,7 +130,6 @@ git submodule add https://git.246060.ru/f1x1t/cmlib.git cmake/cmlib
git submodule add https://git.246060.ru/f1x1t/cmake-find.git cmake/find
git submodule add https://git.246060.ru/f1x1t/cmake-generators.git cmake/generators
git submodule add https://git.246060.ru/f1x1t/cmake-doc.git cmake/doc
git submodule add https://git.246060.ru/f1x1t/uncrustify-config.git cmake/etc/uncrustify
git commit -a -m "Начало проекта"
----
@ -146,13 +142,60 @@ git remote add origin АДРЕС_РЕПОЗИТОРИЯ_НА_СЕРВЕРЕ
git push -u origin master
----
После отправки файлов на сервер отредактировать файл `.gitmodules`,
так чтобы он содержал только относительные пути к подмодулям, чтобы
система автоматической сборки проекта могла их загружать без дополнительной
авторизации. Например, заменить:
[source,ini]
----
[submodule "cmake/cmlib"]
path = cmake/cmlib
url = git@git.246060.ru:f1x1t/cmlib.git
[submodule "cmake/find"]
path = cmake/find
url = git@git.246060.ru:f1x1t/cmake-find.git
[submodule "cmake/generators"]
path = cmake/generators
url = git@git.246060.ru:f1x1t/cmake-generators.git
[submodule "cmake/doc"]
path = cmake/doc
url = git@git.246060.ru:f1x1t/cmake-doc.git
----
на
[source,ini]
----
[submodule "cmake/cmlib"]
path = cmake/cmlib
url = ../../f1x1t/cmlib.git
[submodule "cmake/find"]
path = cmake/find
url = ../../f1x1t/cmake-find.git
[submodule "cmake/generators"]
path = cmake/generators
url = ../../f1x1t/cmake-generators.git
[submodule "cmake/doc"]
path = cmake/doc
url = ../../f1x1t/cmake-doc.git
----
Обновить пути и сохранить изменения:
[source,sh]
----
git submodule sync --recursive
git add .gitmodules
git commit -m "Настройка путей к подмодулям"
----
Загрузить шаблоны для автоматической сборки проекта в разных вариантах
программных окружений и зафиксировать изменения:
[source,sh]
----
mkdir .gitlab-ci
wget -O .gitlab-ci.yml https://git.246060.ru/f1x1t/gitlab-ci/raw/branch/master/.gitlab-ci.yml
wget https://git.246060.ru/f1x1t/gitlab-ci/raw/branch/master/.gitlab-ci.yml
git add .gitlab-ci.yml
git commit -m "Настройка автосборки"
----
@ -166,30 +209,35 @@ git add .clang-tidy
git commit -m "Настройка Clang-Tidy"
----
Загрузить файл настройки для программы https://github.com/cheshirekow/cmake_format/[cmake-format],
используемой для форматирования файлов CMake:
[source,sh]
----
wget https://git.246060.ru/f1x1t/cmake-format/raw/branch/master/.cmake-format.py
git add .cmake-format.py
git commit -m "Настройка cmake-format"
----
Создать стандартные файлы и каталоги:
[source,sh]
----
mkdir -p doc/breathe
touch doc/breathe/index.md.in
mkdir -p files/etc
touch files/etc/.keep-directory
mkdir -p files/data
touch files/data/.keep-directory
mkdir -p files/lib
touch files/lib/.keep-directory
mkdir -p files/log
touch files/log/.keep-directory
mkdir -p files/{etc,log,share,var}
touch files/{etc,log,share,var}/.gitkeep
git add doc files
git commit -m "Стандартные файлы и каталоги"
----
IMPORTANT: Файлы `.keep-directory` позволяют защитить каталоги от удаления
IMPORTANT: Файлы `.gitkeep` позволяют защитить каталоги от удаления
(будет выводиться дополнительное предупреждение, что каталог не пуст) и
обеспечивают возможность помещения каталогов с систему контроля версий git,
обеспечивают возможность помещения каталогов с систему контроля версий Git,
в которой пустые каталоги недопустимы (это правильно!).
Создать файл `.gitignore` для исключения каталогов и файлов из-под контроля git:
Создать файл `.gitignore` для исключения каталогов и файлов из-под контроля Git:
[source,sh]
----
@ -215,7 +263,7 @@ cmake_policy(VERSION 3.0.2..3.7)
project(cmlib-example-base VERSION 0.2.0 LANGUAGES C CXX)
----
Значение версии следует формировать согласно правилам
Значение версии проекта следует формировать согласно правилам
https://semver.org/lang/ru/[семантического версионирования].
Для подключения функций для CMake из библиотеки CMLib, нужно добавить
@ -223,6 +271,21 @@ https://semver.org/lang/ru/[семантического версиониров
[source,cmake]
----
###
# Обязательные переменные для CMLib
###
# Название организации
set(CMLIB_ORGANIZATION_NAME "Org." CACHE STRING "")
# Имя автора
set(CMLIB_AUTHOR_NAME "John Doe" CACHE STRING "")
# Почта автора
set(CMLIB_AUTHOR_EMAIL "mail@johndoe.com" CACHE STRING "")
# Краткое описание проекта
set(CMLIB_DESCRIPTION "Пример проекта: начало" CACHE STRING "")
# В каталоге cmake/cmlib находятся файлы с библиотечными функциями
if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/cmake/cmlib)
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/cmlib)
@ -234,31 +297,14 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/find)
include(CMLibCommon)
----
[[variables-cmake]]
В каталоге `cmake/etc` требуется создать файл `Variables.cmake`,
в котором должны быть определены переменные, используемые
библиотекой CMLib для архивирования исходных текстов, автоматического
создания пакетов, генерации документации:
[source,cmake]
----
set(ORGANIZATION_NAME "org")
set(AUTHOR_NAME "John Doe")
set(DOXYGEN_PROJECT_TITLE "Пример проекта (начало)")
set(DOXYGEN_GENERATE_LATEX YES)
set(DOXYGEN_GENERATE_HTML YES)
set(CPACK_PACKAGE_CONTACT "John Doe <box@mail.domain>")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "CMake project example")
----
Произведённые изменения можно зафиксировать:
Значения обязательных переменных, используемых библиотекой CMLib
для архивирования исходных текстов, автоматического создания пакетов,
генерации документации, следует отредактировать, после чего
произведённые изменения можно зафиксировать:
[source,sh]
----
git add cmake/etc/Variables.cmake CMakeLists.txt
git commit -m "Подключение библиотеки CMLib"
git commit -m "Подключение библиотеки CMLib" CMakeLists.txt
----
Чтобы проверить корректность подключения CMLib, можно выполнить команду:
@ -337,14 +383,14 @@ sudo apt-get install curl libcurl-dev libboost-all-dev
На этапе конфигурирования проекта можно сгенерировать файл, в который
будут записаны собранные значения параметров. В библиотеке CMLib
присутствует функция `cmlib_config_hpp_generate()`, создающая файл
присутствует функция `cmlib_generate_private_config_hpp()`, создающая файл
`${CMAKE_BINARY_DIR}/include/cmlib_private_config.hpp`, в который
записывается информация о имени и версии проекта, дате и типе сборки.
[source,cmake]
----
# Автоматически генерируемый заголовочный файл
cmlib_config_hpp_generate()
cmlib_generate_private_config_hpp()
----
@ -452,7 +498,7 @@ set(Boost_USE_STATIC_RUNTIME ON)
find_package(Boost 1.55.0 REQUIRED)
# Автоматически генерируемый заголовочный файл
cmlib_config_hpp_generate()
cmlib_generate_private_config_hpp()
# Каталог с исходными текстами библиотеки
add_subdirectory(src/cmlib-example)
@ -568,7 +614,7 @@ set(Boost_USE_STATIC_RUNTIME ON)
find_package(Boost 1.55.0 REQUIRED)
# Автоматически генерируемый заголовочный файл
cmlib_config_hpp_generate()
cmlib_generate_private_config_hpp()
# Приложение
add_subdirectory(src/cmlib-example)
@ -800,7 +846,7 @@ target_include_directories(${TRGT} PUBLIC $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/
Для поиска необходимых компонентов Qt5 нужно в файле `CMakeLists.txt`,
находящемся в корневом каталоге проекта, перед вызовом функции
`cmlib_config_hpp_generate()` добавить строку:
`cmlib_generate_private_config_hpp()` добавить строку:
[source,cmake]
----
@ -926,7 +972,7 @@ int main( int argc, char** argv )
git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-app-qt5-gui
----
В каталоге `files/data` создать файл описания включаемых ресурсов `icon.qrc`:
В каталоге `files/share` создать файл описания включаемых ресурсов `icon.qrc`:
[source,xml]
----
@ -941,7 +987,7 @@ git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-app-qt5-gui
[source,sh]
----
wget https://git.246060.ru/f1x1t/cmlib-example-app-qt5-gui/raw/branch/master/files/data/icon.png
wget https://git.246060.ru/f1x1t/cmlib-example-app-qt5-gui/raw/branch/master/files/share/icon.png
----
Для графического приложения нужно создать файл описания интерфейса
@ -1098,7 +1144,7 @@ set(TRGT_ui
# Файлы описания ресурсов, включаемых в исполняемый файл
set(TRGT_qrc
${CMAKE_SOURCE_DIR}/files/data/icon.qrc)
${CMAKE_SOURCE_DIR}/files/share/icon.qrc)
###
# Конец списков файлов
###
@ -1179,7 +1225,14 @@ git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-app-features
`dos2unix` и `uncrustify`. Утилита `dos2unix` приводит переводы строк в
файлах к стандарту, принятому в Unix. Утилита `uncrustify` форматирует
файлы с исходными кодами на языке C{plus}{plus} в соответствии с правилами,
перечисленными в файле `cmake/etc/uncrustify/default.cfg`.
перечисленными в файле `cmake/etc/uncrustify/default.cfg`. Можно использовать
собственный файл `default.cfg` или подключить подмодуль из репозитория:
[source,sh]
----
git submodule add https://git.246060.ru/f1x1t/uncrustify-config.git cmake/etc/uncrustify
git commit -m "Настройка uncrustify"
----
IMPORTANT: Настройка правил форматирования помогает другим разработчикам
придерживаться вашего стиля программирования и отправлять изменения в ваш
@ -1194,6 +1247,16 @@ IMPORTANT: Настройка правил форматирования помо
add_format_sources(${TRGT} ${TRGT_cpp} ${TRGT_headers})
----
Для автоматической проверки исходных текстов на соответствие стандарту
форматирования можно к локальному репозиторию подключить скрипт, выполняемый
перед фиксацией (`pre-commit`):
[source,sh]
----
wget -O - https://git.246060.ru/f1x1t/githooks/archive/master.tar.gz | tar zx --strip-components=1 -C .git/hooks
----
=== Статический анализ исходных кодов
Для работы с программами на языке C{plus}{plus} используются утилиты,

View File

@ -25,7 +25,7 @@ sudo setcap cap_sys_ptrace=eip /opt/intel/vtune_profiler/bin64/amplxe-perf
----
[arabic, start=6]
. Создать образ
. Создать образ:
`mksquashfs /opt/intel/* /home/user/intel.sfs -comp xz -Xbcj x86 -all-root -b 512K`
. Удалить содержимое каталога `/opt/intel`.
. Примонтировать образ:
@ -37,3 +37,33 @@ sudo setcap cap_sys_ptrace=eip /opt/intel/vtune_profiler/bin64/amplxe-perf
source /opt/intel/bin/compilervars.sh intel64
source /opt/intel/vtune_profiler/amplxe-vars.sh
----
[arabic, start=10]
. Создать файл `/etc/sysctl.d/97-vtune.conf`:
[source,text]
----
kernel.kptr_restrict=0
kernel.perf_event_paranoid=0
kernel.yama.ptrace_scope=0
----
[arabic, start=11]
. Прочитать его: `sysctl -p /etc/sysctl.d/97-vtune.conf`
. Создать группу `vtune` и добавить в неё пользователя:
[source,sh]
----
groupadd vtune
usermod -a -G vtune user
----
[arabic, start=13]
. Установить модули ядра для упрощения доступа к отладочной информации:
[source,sh]
----
sudo apt-get install dkms build-essential linux-headers-generic
sudo dpkg -i /opt/intel/vtune-dkms*deb
----