Обновление
This commit is contained in:
parent
8639788c93
commit
7505316c2c
@ -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} используются утилиты,
|
||||
|
@ -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
|
||||
----
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user