Compare commits
71 Commits
31c6c022bc
...
master
Author | SHA1 | Date | |
---|---|---|---|
9206a9ff3a | |||
25b194750e | |||
25491b80c4 | |||
8c3a99eff9 | |||
a2cca2dd8c | |||
8e3f80d82c | |||
763ec72402 | |||
7505316c2c | |||
8639788c93 | |||
0e27e5e68d | |||
578274e444 | |||
2de1503574 | |||
64e5aa161f | |||
2b629c9dc9 | |||
6579472659 | |||
61fa5230ae | |||
dd840cdbc9 | |||
8fa46a57be | |||
e1bfd02131 | |||
0afb335879 | |||
daf7136008 | |||
d14d71910c | |||
1c6f6c4945 | |||
bf875c1842 | |||
373fe00cb3 | |||
b2cfbfafca | |||
c3930f59f9 | |||
1a7e8c5a56 | |||
2af87bc633 | |||
5b2ac484f8 | |||
cc81e6ac8c | |||
79193d4152 | |||
71cbd8a230 | |||
11d1c31ce7 | |||
6353b7839e | |||
4fdc1e4951 | |||
562d2ecddf | |||
101ea1880d | |||
72e6b66a52 | |||
3617a09b2e | |||
3d3aac6206 | |||
12c6f6396f | |||
6897baf6c6 | |||
8b92ccf57a | |||
057a213a80 | |||
af643e1e35 | |||
363822b166 | |||
c723a9d7b5 | |||
33ead8f7e6 | |||
3cfc262a3d | |||
bc250dd0bf | |||
0d83b3637c | |||
6bd1d03d3b | |||
32853cc8f4 | |||
311c812181 | |||
d4bc574a94 | |||
876ff1ade5 | |||
afa58987da | |||
0643cb5f73 | |||
4717bd0336 | |||
36d088e75c | |||
ac859dc4ec | |||
e0a18fc66d | |||
b0a8898f1f | |||
9857fa778d | |||
7da59f9b83 | |||
e208752f44 | |||
78ecf3b655 | |||
12dbf54505 | |||
3858c49164 | |||
dfd884e36b |
5
.gitignore
vendored
@ -1,3 +1,5 @@
|
||||
/.asciidoctor
|
||||
|
||||
cache/*
|
||||
cache-ascii/*
|
||||
cache-full/*
|
||||
@ -7,9 +9,10 @@ __pycache__
|
||||
wiki/trash
|
||||
wiki/notes.sqlite
|
||||
upload.sh
|
||||
wiki/**/*.png
|
||||
wiki/**/diag*.png
|
||||
wiki/**/*.png.cache
|
||||
|
||||
*.pyc
|
||||
*.txt
|
||||
upload-*.sh
|
||||
|
||||
|
29
.gitmodules
vendored
@ -1,28 +1,27 @@
|
||||
[submodule "plugins/thirdparty/md-metayaml"]
|
||||
path = plugins/thirdparty/md-metayaml
|
||||
url = git@git.246060.ru:/f1x1t/pelican-md-metayaml.git
|
||||
[submodule "plugins/thirdparty/pelican-css"]
|
||||
path = plugins/thirdparty/pelican-css
|
||||
url = https://notabug.org/jorgesumle/pelican-css
|
||||
[submodule "plugins/official"]
|
||||
path = plugins/official
|
||||
url = git@github.com:/getpelican/pelican-plugins.git
|
||||
url = git@git.246060.ru:f1x1t/pelican-md-metayaml.git
|
||||
[submodule "themes/bootstrap4"]
|
||||
path = themes/bootstrap4
|
||||
url = git@git.246060.ru:/f1x1t/pelican-theme-bootstrap4.git
|
||||
url = git@git.246060.ru:f1x1t/pelican-theme-bootstrap4.git
|
||||
[submodule "plugins/thirdparty/yuicompressor-opt"]
|
||||
path = plugins/thirdparty/yuicompressor-opt
|
||||
url = git@git.246060.ru:/f1x1t/pelican-yuicompressor-opt.git
|
||||
url = git@git.246060.ru:f1x1t/pelican-yuicompressor-opt.git
|
||||
[submodule "plugins/thirdparty/pelidoc"]
|
||||
path = plugins/thirdparty/pelidoc
|
||||
url = git@git.246060.ru:/f1x1t/pelican-pelidoc.git
|
||||
url = git@git.246060.ru:f1x1t/pelican-pelidoc.git
|
||||
[submodule "plugins/thirdparty/pandoc_reader"]
|
||||
path = plugins/thirdparty/pandoc_reader
|
||||
url = git@git.246060.ru:/f1x1t/pelican-pandoc-reader
|
||||
branch = master
|
||||
[submodule "plugins/thirdparty/replacer"]
|
||||
path = plugins/thirdparty/replacer
|
||||
url = git@github.com:/narusemotoki/replacer
|
||||
url = git@git.246060.ru:f1x1t/pelican-pandoc-reader
|
||||
[submodule "plugins/thirdparty/asciidoctor"]
|
||||
path = plugins/thirdparty/asciidoctor
|
||||
url = git@git.246060.ru:f1x1t/pelican-asciidoctor
|
||||
[submodule "plugins/thirdparty/replacer"]
|
||||
path = plugins/thirdparty/replacer
|
||||
url = git@git.246060.ru:f1x1t/pelican-replacer
|
||||
[submodule "plugins/thirdparty/pelican-css"]
|
||||
path = plugins/thirdparty/pelican-css
|
||||
url = git@git.246060.ru:f1x1t/pelican-css
|
||||
[submodule "plugins/official"]
|
||||
path = plugins/official
|
||||
url = git@git.246060.ru:f1x1t/pelican-plugins-official
|
||||
|
@ -55,15 +55,13 @@ PLUGINS = ["i18n_subsites", "pelican-css", "series", "subcategory", "tag_cloud",
|
||||
ASCIIDOCTOR_CMD = "asciidoctor"
|
||||
ASCIIDOCTOR_EXTRA_OPTIONS = [
|
||||
'--require', 'asciidoctor-diagram',
|
||||
'--require', '{}/themes/pdf/qa.rb'.format(os.getcwd()),
|
||||
'--attribute=imagesdir={}/wiki/images'.format(os.getcwd()),
|
||||
'--attribute=source-highlighter=pygments',
|
||||
'--attribute=pygments-style=manni',
|
||||
'--attribute=pygments-css=class',
|
||||
'--attribute=lang=ru',
|
||||
'--attribute=figure-caption=Рисунок',
|
||||
'--attribute=table-caption=Таблица',
|
||||
'--attribute=toc-title=Содержание',
|
||||
'--attribute=important-caption=Важно',
|
||||
'--attribute=l10ndir={}/themes/l10n'.format(os.getcwd()),
|
||||
'--attribute=experimental',
|
||||
'--attribute=pdf-themesdir={}/themes/pdf'.format(os.getcwd()),
|
||||
'--attribute=pdf-theme=wiki',
|
||||
|
23
themes/l10n/ru.adoc
Normal file
@ -0,0 +1,23 @@
|
||||
// Russian translation, courtesy of Alexander Zobkov <alexander.zobkov@gmail.com>
|
||||
:appendix-caption: Приложение
|
||||
:appendix-refsig: {appendix-caption}
|
||||
:caution-caption: Внимание
|
||||
:chapter-label: Глава
|
||||
:chapter-refsig: {chapter-label}
|
||||
:example-caption: Пример
|
||||
:figure-caption: Рисунок
|
||||
:important-caption: Важно
|
||||
:last-update-label: Последнее обновление
|
||||
ifdef::listing-caption[:listing-caption: Листинг]
|
||||
ifdef::manname-title[:manname-title: Название]
|
||||
:note-caption: Примечание
|
||||
:part-label: Часть
|
||||
:part-refsig: {part-label}
|
||||
ifdef::preface-title[:preface-title: Предисловие]
|
||||
:section-refsig: Раздел
|
||||
:table-caption: Таблица
|
||||
:tip-caption: Подсказка
|
||||
:toc-title: Содержание
|
||||
:untitled-label: Без названия
|
||||
:version-label: Версия
|
||||
:warning-caption: Предупреждение
|
60
themes/pdf/qa.rb
Normal file
@ -0,0 +1,60 @@
|
||||
require 'asciidoctor/extensions'
|
||||
|
||||
class QuestionBlock < Asciidoctor::Extensions::BlockProcessor
|
||||
use_dsl
|
||||
named :QUESTION
|
||||
on_context :example
|
||||
|
||||
def process parent, reader, attrs
|
||||
attrs['name'] = 'question'
|
||||
attrs['caption'] = 'Question'
|
||||
admon = create_block parent, :admonition, nil, attrs, content_model: :compound
|
||||
parse_content admon, reader
|
||||
admon
|
||||
end
|
||||
end
|
||||
|
||||
class QuestionBlockCss < Asciidoctor::Extensions::DocinfoProcessor
|
||||
use_dsl
|
||||
|
||||
def process doc
|
||||
'<style>
|
||||
.admonitionblock td.icon .icon-question:before{content:"\f128";color:#000}
|
||||
</style>'
|
||||
end
|
||||
end
|
||||
|
||||
Asciidoctor::Extensions.register do
|
||||
block QuestionBlock
|
||||
docinfo_processor QuestionBlockCss
|
||||
end
|
||||
|
||||
class AnswerBlock < Asciidoctor::Extensions::BlockProcessor
|
||||
use_dsl
|
||||
named :ANSWER
|
||||
on_context :example
|
||||
|
||||
def process parent, reader, attrs
|
||||
attrs['name'] = 'answer'
|
||||
attrs['caption'] = 'Answer'
|
||||
admon = create_block parent, :admonition, nil, attrs, content_model: :compound
|
||||
parse_content admon, reader
|
||||
admon
|
||||
end
|
||||
end
|
||||
|
||||
class AnswerBlockCss < Asciidoctor::Extensions::DocinfoProcessor
|
||||
use_dsl
|
||||
|
||||
def process doc
|
||||
'<style>
|
||||
.admonitionblock td.icon .icon-answer:before{content:"\f0eb";color:#000}
|
||||
</style>'
|
||||
end
|
||||
end
|
||||
|
||||
Asciidoctor::Extensions.register do
|
||||
block AnswerBlock
|
||||
docinfo_processor AnswerBlockCss
|
||||
end
|
||||
|
@ -9,3 +9,14 @@ image:
|
||||
font-style: normal
|
||||
caption:
|
||||
font-style: normal
|
||||
admonition:
|
||||
icon:
|
||||
question:
|
||||
name: fa-question
|
||||
stroke_color: 000000
|
||||
size: 24
|
||||
answer:
|
||||
name: fa-lightbulb
|
||||
stroke_color: 000000
|
||||
size: 24
|
||||
|
||||
|
44
wiki/Linux/System/Настройка Redis.adoc
Normal file
@ -0,0 +1,44 @@
|
||||
= Настройка Redis
|
||||
:category: Linux
|
||||
:tags: Linux, Redis,
|
||||
|
||||
Создать файл `/etc/sysctl.d/98-redis.conf`:
|
||||
|
||||
[source,text]
|
||||
----
|
||||
net.core.somaxconn=65535
|
||||
vm.overcommit_memory=1
|
||||
----
|
||||
|
||||
Перезагрузить систему или выполнить команду:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
sudo sysctl -p
|
||||
----
|
||||
|
||||
Создать файл `/etc/systemd/system/disable-transparent-huge-pages.service`:
|
||||
|
||||
[source,text]
|
||||
----
|
||||
[Unit]
|
||||
Description=Disable Transparent Huge Pages (THP)
|
||||
DefaultDependencies=no
|
||||
After=sysinit.target local-fs.target
|
||||
Before=mongod.service redis.service redis-server.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'
|
||||
|
||||
[Install]
|
||||
WantedBy=basic.target
|
||||
----
|
||||
|
||||
Разрешить автоматический запуск при загрузке системы:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
sudo systemctl enable disable-transparent-huge-pages.service
|
||||
----
|
||||
|
29
wiki/Linux/System/Настройка параметров локальной сети.adoc
Normal file
@ -0,0 +1,29 @@
|
||||
= Настройка параметров локальной сети
|
||||
:category: Linux
|
||||
:tags: Linux, сеть, ethernet
|
||||
|
||||
Создать файл `/etc/sysctl.d/98-network.conf`:
|
||||
|
||||
[source,text]
|
||||
----
|
||||
net.core.rmem_default=262144
|
||||
net.core.wmem_default=262144
|
||||
|
||||
net.core.rmem_max=33554432
|
||||
net.core.wmem_max=33554432
|
||||
|
||||
net.ipv4.tcp_rmem = 4096 262144 33554432
|
||||
net.ipv4.tcp_wmem = 4096 262144 33554432
|
||||
net.ipv4.tcp_mem = 4096 262144 33554432
|
||||
|
||||
net.core.netdev_max_backlog = 16384
|
||||
net.ipv4.ipfrag_high_threshold = 8388608
|
||||
----
|
||||
|
||||
Перезагрузить систему или выполнить команду:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
sudo sysctl -p
|
||||
----
|
||||
|
1606
wiki/Prog/Development/CMake управление проектом v2.adoc
Normal file
@ -2,7 +2,9 @@
|
||||
:title-separator: {sp}|
|
||||
:category: Программирование
|
||||
:tags: программирование, cmake, qt
|
||||
:icons: font
|
||||
:toc:
|
||||
include::{l10ndir}/{lang}.adoc[]
|
||||
|
||||
== Полезные ссылки
|
||||
|
||||
@ -19,28 +21,25 @@
|
||||
│ ├── debug
|
||||
│ │ ├── bin
|
||||
│ │ ├── etc
|
||||
│ │ ├── files
|
||||
│ │ │ ├── data
|
||||
│ │ │ ├── lib
|
||||
│ │ │ └── log
|
||||
│ │ ├── include
|
||||
│ │ └── lib
|
||||
│ │ ├── lib
|
||||
│ │ ├── log
|
||||
│ │ ├── share
|
||||
│ │ └── var
|
||||
│ └── release
|
||||
├── .git
|
||||
├── .gitlab-ci
|
||||
├── cmake
|
||||
│ ├── cmlib
|
||||
│ ├── doc
|
||||
│ ├── etc
|
||||
│ │ └── uncrustify
|
||||
│ ├── find
|
||||
│ └── generators
|
||||
├── doc
|
||||
├── files
|
||||
│ ├── data
|
||||
│ ├── etc
|
||||
│ ├── lib
|
||||
│ └── log
|
||||
│ ├── log
|
||||
│ ├── share
|
||||
│ └── var
|
||||
├── l10n
|
||||
├── src
|
||||
│ ├── app
|
||||
@ -59,17 +58,15 @@
|
||||
|`_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` | Правила для автоматической генерации документации
|
||||
|`cmake/etc` | Файлы настроек, используемые в CMake
|
||||
|`cmake/etc/uncrustify` | Файл настройки для программы автоматического форматирования исходных текстов
|
||||
|`cmake/find` | Модули CMake для поиска внешних программ и библиотек
|
||||
@ -77,9 +74,9 @@
|
||||
|`doc` | Документация для проекта
|
||||
|`files` | Каталог для дополнительных файлов
|
||||
|`files/etc` | Каталог для файлов настроек проекта
|
||||
|`files/data` | Каталог для неизменяемых файлов
|
||||
|`files/lib` | Каталог для изменяемых файлов
|
||||
|`files/log` | Каталог для журналов
|
||||
|`files/share` | Каталог для неизменяемых файлов
|
||||
|`files/var` | Каталог для изменяемых файлов
|
||||
|`l10n` | Файлы переводов
|
||||
|`src` | Исходные тексты
|
||||
|`src/app` | Исходные тексты программы
|
||||
@ -113,7 +110,7 @@ git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-base
|
||||
=== Инициализация подмодулей
|
||||
|
||||
Для начала нужно создать каталог для проекта, перейти в него и
|
||||
инициализировать репозиторий git:
|
||||
инициализировать репозиторий:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
@ -130,8 +127,6 @@ git init
|
||||
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 "Начало проекта"
|
||||
----
|
||||
|
||||
@ -144,15 +139,55 @@ 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
|
||||
----
|
||||
|
||||
на
|
||||
|
||||
[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
|
||||
----
|
||||
|
||||
Обновить пути и сохранить изменения:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
git submodule sync --recursive
|
||||
git add .gitmodules
|
||||
git commit -m "Настройка путей к подмодулям"
|
||||
----
|
||||
|
||||
Загрузить шаблоны для автоматической сборки проекта в разных вариантах
|
||||
программных окружений и зафиксировать изменения:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
mkdir .gitlab-ci
|
||||
wget -O .gitlab-ci/scheduled.yml https://git.246060.ru/f1x1t/gitlab-ci/raw/branch/master/.gitlab-ci/scheduled.yml
|
||||
wget -O .gitlab-ci.yml https://git.246060.ru/f1x1t/gitlab-ci/raw/branch/master/.gitlab-ci.yml
|
||||
git add .gitlab-ci.yml .gitlab-ci/scheduled.yml
|
||||
wget https://git.246060.ru/f1x1t/gitlab-ci/raw/branch/master/.gitlab-ci.yml
|
||||
git add .gitlab-ci.yml
|
||||
git commit -m "Настройка автосборки"
|
||||
----
|
||||
|
||||
@ -165,25 +200,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 "Стандартные файлы и каталоги"
|
||||
----
|
||||
|
||||
Создать файл `.gitignore` для исключения каталогов и файлов из-под контроля git:
|
||||
IMPORTANT: Файлы `.gitkeep` позволяют защитить каталоги от удаления
|
||||
(будет выводиться дополнительное предупреждение, что каталог не пуст) и
|
||||
обеспечивают возможность помещения каталогов с систему контроля версий Git,
|
||||
в которой пустые каталоги недопустимы (это правильно!).
|
||||
|
||||
Создать файл `.gitignore` для исключения каталогов и файлов из-под контроля Git:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
@ -209,7 +254,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, нужно добавить
|
||||
@ -217,6 +262,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)
|
||||
@ -228,53 +288,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_GENERATOR "TXZ;DEB")
|
||||
set(CPACK_PACKAGE_CONTACT "John Doe <box@mail.domain>")
|
||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "CMake project example")
|
||||
set(CPACK_DEBIAN_PACKAGE_SECTION "misc")
|
||||
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
|
||||
set(CPACK_SOURCE_IGNORE_FILES
|
||||
"${CMAKE_BINARY_DIR}"
|
||||
"/\\\\.git/"
|
||||
"/\\\\.gitlab-ci/"
|
||||
"^${CMAKE_SOURCE_DIR}/.?build.?/"
|
||||
"^${CMAKE_SOURCE_DIR}/.?output.?/"
|
||||
"^${CMAKE_SOURCE_DIR}/files/lib"
|
||||
"^${CMAKE_SOURCE_DIR}/files/log"
|
||||
"\\\\.clang-tidy$"
|
||||
"\\\\.cmake-format$"
|
||||
"\\\\.gitignore$"
|
||||
"\\\\.gitattributes$"
|
||||
"\\\\.gitmodules$"
|
||||
"\\\\.gitlab-ci.yml"
|
||||
"CMakeLists.txt.user.*"
|
||||
"~$"
|
||||
"\\\\.swp$")
|
||||
----
|
||||
|
||||
<<<
|
||||
|
||||
Произведённые изменения можно зафиксировать:
|
||||
Значения обязательных переменных, используемых библиотекой CMLib
|
||||
для архивирования исходных текстов, автоматического создания пакетов,
|
||||
генерации документации, следует отредактировать, после чего
|
||||
произведённые изменения можно зафиксировать:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
git add cmake/etc/Variables.cmake CMakeLists.txt
|
||||
git commit -m "Подключение библиотеки CMLib"
|
||||
git commit -m "Подключение библиотеки CMLib" CMakeLists.txt
|
||||
----
|
||||
|
||||
Чтобы проверить корректность подключения CMLib, можно выполнить команду:
|
||||
@ -293,7 +314,10 @@ git commit -m "Подключение библиотеки CMLib"
|
||||
выполнять с помощью программы https://en.wikipedia.org/wiki/Pkg-config[`pkg-config`]
|
||||
или функции CMake `find_package`. В любом случае для указания того,
|
||||
что наличие искомого объекта обязательно для сборки, используется
|
||||
параметр `REQUIRED`.
|
||||
параметр `REQUIRED`. Если требуемый компонент не будет найден, настройка проекта
|
||||
завершится с ошибкой и для продолжения работы будет необходимо установить
|
||||
недостающие пакеты. Кроме того можно указывать требования к версии необходимого
|
||||
пакета.
|
||||
|
||||
=== Поиск с помощью программы `pkg-config`
|
||||
|
||||
@ -311,10 +335,18 @@ git commit -m "Подключение библиотеки CMLib"
|
||||
# Поиск библиотек с помощью pkgconfig
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(GSL REQUIRED gsl)
|
||||
pkg_check_modules(FFTW3 REQUIRED fftw3)
|
||||
pkg_check_modules(FFTW3 REQUIRED fftw3 >= 3.3.2)
|
||||
pkg_check_modules(UDEV udev)
|
||||
----
|
||||
|
||||
Если настройка проекта завершается с ошибкой, то нужно установить пакеты:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
sudo apt-get install pkg-config libgsl-dev libfftw3-dev
|
||||
----
|
||||
|
||||
|
||||
=== Поиск с помощью функции `find_package`
|
||||
|
||||
Если системная библиотека поставляется без файла описания для `pkg-config`
|
||||
@ -327,6 +359,14 @@ pkg_check_modules(UDEV udev)
|
||||
# Поиск с помощью функции find_package
|
||||
find_package(LibXml2)
|
||||
find_package(CURL REQUIRED)
|
||||
find_package(Boost 1.55.0 REQUIRED)
|
||||
----
|
||||
|
||||
Если настройка проекта завершается с ошибкой, то нужно установить пакеты:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
sudo apt-get install curl libcurl-dev libboost-all-dev
|
||||
----
|
||||
|
||||
|
||||
@ -334,14 +374,14 @@ find_package(CURL REQUIRED)
|
||||
|
||||
На этапе конфигурирования проекта можно сгенерировать файл, в который
|
||||
будут записаны собранные значения параметров. В библиотеке 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()
|
||||
----
|
||||
|
||||
|
||||
@ -365,24 +405,63 @@ make uninstall
|
||||
Необходимые переменные устанавливаются в файле `cmake/etc/Variables.cmake`
|
||||
<<variables-cmake,см. выше>>.
|
||||
|
||||
Устанавливаемые файлы делятся на две группы `MAIN` и `DEV` с помощью
|
||||
параметра `COMPONENT` функции `install`. В группу `MAIN` необходимо
|
||||
помещать файлы для установки на целевую систему (исполняемые файлы,
|
||||
файлы настроек, файлы данных, разделяемые библиотеки), а в группу `DEV` ---
|
||||
для установки на систему для разработки (заголовочные файлы, статические
|
||||
библиотеки).
|
||||
Библиотека CMLib предоставляет возможность стандартного разбиения
|
||||
на пакеты в соответствии с критериями, приведёнными в таблице.
|
||||
|
||||
По умолчанию цель для упаковки исходных текстов называется `package_source`.
|
||||
Бинарные пакеты создаются программой `cpack`. Пример:
|
||||
.Критерии разбиения на пакеты
|
||||
[cols="3m,3m,8",options="header"]
|
||||
|===
|
||||
| Компонент | Имя пакета | Назначение
|
||||
| main | proj | Основные файла проекта (исполняемые файлы, файлы данных, настроек, ресурсов)
|
||||
| base-dev | libproj-base-dev | Заголовочные файлы, дополнительные файлы необходимые для разработки
|
||||
| libs-dev | libproj-dev | Статические библиотеки
|
||||
| doc | proj-dev | Документация
|
||||
|===
|
||||
|
||||
Принадлежность устанавливаемого файла к компоненту определяется с помощью
|
||||
параметра `COMPONENT` функции `install`. В компонент `main` необходимо
|
||||
помещать файлы для установки на целевую систему (исполняемые файлы,
|
||||
файлы настроек, файлы данных, разделяемые библиотеки), в компоненты `base-dev`
|
||||
и `base-libs` --- для установки на систему для разработки (заголовочные
|
||||
файлы, статические библиотеки). Пример включения устанавливаемых файлов
|
||||
в компоненты можно посмотреть
|
||||
https://git.246060.ru/f1x1t/myxlib/src/branch/master/src/myx/base/CMakeLists.txt#L46-L54[здесь].
|
||||
|
||||
По умолчанию цель для упаковки исходных текстов называется `package_source`,
|
||||
цель для создания общего архива скомпилированного проекта --- `package`,
|
||||
цель для создания пакетов в формате Debian --- `deb`.
|
||||
|
||||
Для примера работы с архивированием можно сделать копию репозитория
|
||||
библиотеки https://git.246060.ru/f1x1t/myxlib[MyXLib]:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
cd _build/debug
|
||||
make
|
||||
make package_source
|
||||
cpack
|
||||
git clone --recursive https://git.246060.ru/f1x1t/myxlib
|
||||
----
|
||||
|
||||
Дальнейшие шаги:
|
||||
|
||||
[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>
|
||||
----
|
||||
<1> Перейти в каталог проекта
|
||||
<2> Создать каталог для сборки проекта
|
||||
<3> Перейти в каталог для сборки проекта
|
||||
<4> Создать конфигурацию для сборки проекта
|
||||
<5> Скомпилировать проект
|
||||
<6> Сгенерировать документацию
|
||||
<7> Создать архив с результатами компиляции `myx_amd64_0.4.0.tar.xz`
|
||||
<8> Создать архив с исходными текстами `myx-0.4.0.tar.xz`
|
||||
<9> Создать пакеты в формате Debian
|
||||
|
||||
== Примеры библиотек и приложений
|
||||
|
||||
@ -407,16 +486,17 @@ git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-library
|
||||
set(Boost_USE_STATIC_LIBS ON)
|
||||
set(Boost_USE_MULTITHREADED OFF)
|
||||
set(Boost_USE_STATIC_RUNTIME ON)
|
||||
find_package(Boost 1.55.0 REQUIRED COMPONENTS headers)
|
||||
find_package(Boost 1.55.0 REQUIRED)
|
||||
|
||||
# Автоматически генерируемый заголовочный файл
|
||||
cmlib_config_hpp_generate()
|
||||
cmlib_generate_private_config_hpp()
|
||||
|
||||
# Каталог с исходными текстами библиотеки
|
||||
add_subdirectory(src/cmlib-example)
|
||||
|
||||
# Документация
|
||||
add_subdirectory(cmake/doc)
|
||||
add_breathe_target(doc-breathe)
|
||||
add_doxygen_target(doc-doxygen LATEX YES HTML YES)
|
||||
|
||||
# Создание вспомогательных символических ссылок
|
||||
add_dependencies(cmlib-example create_auxilary_symlinks)
|
||||
@ -438,7 +518,7 @@ set(TRGT_cpp ${CMAKE_CURRENT_SOURCE_DIR}/init.cpp)
|
||||
set(TRGT_hpp ${CMAKE_CURRENT_SOURCE_DIR}/init.hpp)
|
||||
|
||||
# Функция для создания цели, результатом которой будет сборка библиотеки
|
||||
add_common_library(${TRGT} SOURCES ${TRGT_cpp})
|
||||
add_common_library(${TRGT} SOURCES ${TRGT_cpp} ${TRGT_hpp})
|
||||
common_target_properties(${TRGT})
|
||||
|
||||
# Добавление к пути поиска заголовочных файлов
|
||||
@ -523,16 +603,17 @@ git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-app
|
||||
set(Boost_USE_STATIC_LIBS ON)
|
||||
set(Boost_USE_MULTITHREADED OFF)
|
||||
set(Boost_USE_STATIC_RUNTIME ON)
|
||||
find_package(Boost 1.55.0 REQUIRED COMPONENTS headers)
|
||||
find_package(Boost 1.55.0 REQUIRED)
|
||||
|
||||
# Автоматически генерируемый заголовочный файл
|
||||
cmlib_config_hpp_generate()
|
||||
cmlib_generate_private_config_hpp()
|
||||
|
||||
# Приложение
|
||||
add_subdirectory(src/cmlib-example)
|
||||
|
||||
# Документация
|
||||
add_subdirectory(cmake/doc)
|
||||
add_breathe_target(doc-breathe)
|
||||
add_doxygen_target(doc-doxygen LATEX YES HTML YES)
|
||||
|
||||
# Создание вспомогательных символических ссылок
|
||||
add_dependencies(cmlib-example create_auxilary_symlinks)
|
||||
@ -556,11 +637,7 @@ common_target_properties(${TRGT})
|
||||
target_include_directories(${TRGT} SYSTEM PUBLIC ${Boost_INCLUDE_DIRS})
|
||||
|
||||
# Имя целевого каталога и выходного файла для цели
|
||||
set_target_properties(${TRGT}
|
||||
PROPERTIES
|
||||
OUTPUT_NAME ${TRGT}
|
||||
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}
|
||||
)
|
||||
set_target_properties(${TRGT} PROPERTIES OUTPUT_NAME ${TRGT})
|
||||
|
||||
# Правила для установки
|
||||
install(TARGETS ${TRGT} COMPONENT MAIN RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
@ -735,7 +812,7 @@ ExternalProject_Add(
|
||||
INSTALL_DIR ${CMAKE_BINARY_DIR}
|
||||
DOWNLOAD_COMMAND ""
|
||||
CONFIGURE_COMMAND
|
||||
${CMAKE_COMMAND} -"G${CMAKE_GENERATOR}" -DCMAKE_BUILD_TYPE=Debug
|
||||
${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" -DCMAKE_BUILD_TYPE=Debug
|
||||
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
||||
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
|
||||
-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} <SOURCE_DIR>
|
||||
@ -758,14 +835,11 @@ add_dependencies(${TRGT} myxlib)
|
||||
# Добавление каталога, в который устанавливаются заголовочные файлы
|
||||
# от внешнего проекта, к списку путей для поиска
|
||||
target_include_directories(${TRGT} PUBLIC $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
|
||||
|
||||
# Компоновка с библиотеками из внешнего проекта
|
||||
target_link_libraries(${TRGT} myx-qt myx-filesystem myx-base)
|
||||
----
|
||||
|
||||
Для поиска необходимых компонентов Qt5 нужно в файле `CMakeLists.txt`,
|
||||
находящемся в корневом каталоге проекта, перед вызовом функции
|
||||
`cmlib_config_hpp_generate()` добавить строку:
|
||||
`cmlib_generate_private_config_hpp()` добавить строку:
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
@ -773,6 +847,15 @@ target_link_libraries(${TRGT} myx-qt myx-filesystem myx-base)
|
||||
find_package(Qt5 COMPONENTS Core REQUIRED)
|
||||
----
|
||||
|
||||
Если в проекте используются приватные заголовочные файлы из пакета
|
||||
`qtbase5-private-dev`, то нужно добавить следующую инструкцию:
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
find_package(Qt5Core COMPONENTS Private REQUIRED)
|
||||
find_package(Qt5 COMPONENTS Core REQUIRED)
|
||||
----
|
||||
|
||||
<<<
|
||||
|
||||
В файл `src/cmlib-example/CMakeLists.txt` перед вызовом функции
|
||||
@ -820,9 +903,6 @@ add_dependencies(${TRGT} myxlib)
|
||||
# Добавление каталога, в который устанавливаются заголовочные файлы
|
||||
# от внешнего проекта, к списку путей для поиска
|
||||
target_include_directories(${TRGT} PUBLIC $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
|
||||
|
||||
# Компоновка с библиотеками из внешнего проекта
|
||||
target_link_libraries(${TRGT} myx-qt myx-filesystem myx-base)
|
||||
----
|
||||
|
||||
<<<
|
||||
@ -885,7 +965,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]
|
||||
----
|
||||
@ -900,7 +980,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
|
||||
----
|
||||
|
||||
Для графического приложения нужно создать файл описания интерфейса
|
||||
@ -1057,7 +1137,7 @@ set(TRGT_ui
|
||||
|
||||
# Файлы описания ресурсов, включаемых в исполняемый файл
|
||||
set(TRGT_qrc
|
||||
${CMAKE_SOURCE_DIR}/files/data/icon.qrc)
|
||||
${CMAKE_SOURCE_DIR}/files/share/icon.qrc)
|
||||
###
|
||||
# Конец списков файлов
|
||||
###
|
||||
@ -1083,7 +1163,7 @@ qt5_translation(
|
||||
# Правило для автоматической генерации препроцессором qrc
|
||||
# (обязательно после вызова функции qt5_translation, если она есть,
|
||||
# так как она добавляет свои файлы к списку ресурсов)
|
||||
qt5_add_resources(TRTG_qrc_cpp ${TRGT_qrc})
|
||||
qt5_add_resources(TRGT_qrc_cpp ${TRGT_qrc})
|
||||
----
|
||||
|
||||
Цель для создания исполняемого файла нужно изменить таким образом,
|
||||
@ -1092,7 +1172,7 @@ qt5_add_resources(TRTG_qrc_cpp ${TRGT_qrc})
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
add_executable(${TRGT} ${TRGT_ui_h} ${TRGT_moc_cpp} ${TRGT_qrc_cpp} ${TRGT_cpp})
|
||||
add_executable(${TRGT} ${TRGT_ui_h} ${TRGT_moc_cpp} ${TRGT_qrc_cpp} ${TRGT_cpp} ${TRGT_hpp})
|
||||
----
|
||||
|
||||
Подключение заголовочных файлов и библиотек Qt должно выглядеть так:
|
||||
@ -1133,19 +1213,43 @@ git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-app-features
|
||||
|
||||
=== Форматирование исходных текстов
|
||||
|
||||
Функция `add_format_sources` используется для форматирования файлов проекта
|
||||
Функция `add_format_sources` генерирует цель для форматирования файлов проекта
|
||||
в едином стандарте, для её использования требуются установленные программы
|
||||
`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: Настройка правил форматирования помогает другим разработчикам
|
||||
придерживаться вашего стиля программирования и отправлять изменения в ваш
|
||||
проект в формате, который удобен вам. Проявите заботу о своих коллегах и
|
||||
своём проекте!
|
||||
|
||||
Пример использования:
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
# Создание цели format-sources для автоматического форматирования кода
|
||||
add_format_sources(${TRGT} ${TRGT_sources} ${TRGT_headers})
|
||||
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} используются утилиты,
|
||||
@ -1159,6 +1263,7 @@ https://clang.llvm.org/extra/clang-tidy[Clang Tidy],
|
||||
https://clang-analyzer.llvm.org[Clang Static Analyzer] и
|
||||
https://www.viva64.com/ru/pvs-studio[PVS-Studio].
|
||||
|
||||
[[clazy-check]]
|
||||
==== clazy
|
||||
|
||||
Функция `add_clazy_check` создаёт цели, которые используются
|
||||
@ -1176,7 +1281,8 @@ add_clazy_check(${TRGT} ${TRGT_cpp} ${TRGT_hpp} ${TRGT_moc_hpp})
|
||||
|
||||
Функция `add_clang_tidy_check` создаёт цели, которые используются
|
||||
для проверки исходных текстов анализатором `clang-tidy`.
|
||||
Пример использования:
|
||||
Правила проверок задаются в файле `.clang-tidy`, находящемся в
|
||||
корневом каталоге проекта. Пример использования:
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
@ -1210,6 +1316,87 @@ add_clang_analyze_check(${TRGT} ${TRGT_cpp} ${TRGT_hpp} ${TRGT_moc_hpp})
|
||||
add_pvs_check(${TRGT})
|
||||
----
|
||||
|
||||
=== Автоматическое исправление кода
|
||||
|
||||
|
||||
IMPORTANT: Редактирование кода в автоматическом режиме может приводить
|
||||
к его неработоспособности, хотя это и маловероятно. Перед выполнением
|
||||
действий, приведённых в данном раздела, желательно фиксировать текущее
|
||||
состояние в репозитории или делать резервную копию.
|
||||
|
||||
==== clazy
|
||||
|
||||
Программа clazy может преобразовывать в программах, использующих Qt,
|
||||
подключения сигналов и слотов старого типа, производить замену старых ключевых
|
||||
слов, подставлять оптимизированные способы для инициализации строк,
|
||||
исправлять циклы и передачу аргументов в функции для избежания лишних копирований.
|
||||
Для использования данной возможности необходимо установить пакеты:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
sudo apt-get install clazy clang-tools
|
||||
----
|
||||
|
||||
Для включения автоматического исправления нужно в настройках сборки проекта
|
||||
menu:Проекты[Настройки сборки] выбрать цель `clazy-check`:
|
||||
|
||||
[.text-center]
|
||||
.Выбор цели
|
||||
image::cmake-fixes/clazy1.png[clazyfix1,pdfwidth=90%,scaledwidth=90%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
Затем в перечне опций включить `CMLIB_CLAZY_FIX`, нажать кнопку
|
||||
btn:[Применить изменения], а затем скомпилировать проект kbd:[Ctrl+B]:
|
||||
|
||||
[.text-center]
|
||||
.Разрешение автозамены
|
||||
image::cmake-fixes/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[здесь].
|
||||
|
||||
Можно сделать копию репозитория и выполнить правки в автоматическом режиме
|
||||
самостоятельно:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-clazy-fix
|
||||
----
|
||||
|
||||
==== Clang-Tidy
|
||||
|
||||
Анализатор Clang-Tidy предоставляет более широкие возможности по
|
||||
автоматической правке кода. В проектах, использующих Qt, желательно
|
||||
использовать Clang-Tidy после clazy. Программу можно установить командой:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
sudo apt-get install clang-tools clang-tidy
|
||||
----
|
||||
|
||||
Для включения автоматического исправления нужно в настройках сборки проекта
|
||||
menu:Проекты[Настройки сборки] выбрать цель `clang-tidy-check`:
|
||||
|
||||
[.text-center]
|
||||
.Выбор цели
|
||||
image::cmake-fixes/clang-tidy1.png[clangtidyfix1,pdfwidth=90%,scaledwidth=90%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
Затем в перечне опций включить `CMLIB_CLANG_TIDY_FIX`, нажать кнопку
|
||||
btn:[Применить изменения], а затем скомпилировать проект kbd:[Ctrl+B]:
|
||||
|
||||
[.text-center]
|
||||
.Разрешение автозамены
|
||||
image::cmake-fixes/clang-tidy2.png[clangtidyfix2,pdfwidth=90%,scaledwidth=90%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
|
||||
=== Динамический анализ программы
|
||||
|
||||
@ -1348,3 +1535,71 @@ cd _build/debug
|
||||
cmake ../..
|
||||
make all_unity
|
||||
----
|
||||
|
||||
=== Документирование кода
|
||||
|
||||
Для документирования кода используются блоки комментариев,
|
||||
оформленные для обработки программой https://www.doxygen.nl[Doxygen].
|
||||
Установка программы:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
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` проекта.
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
# Документация
|
||||
add_doxygen_target(doc-doxygen LATEX YES HTML YES)
|
||||
add_breathe_target(doc-breathe)
|
||||
----
|
||||
|
||||
В результате будут добавлены цели `doc-doxygen` и `doc-breathe`,
|
||||
которые можно использовать после конфигурирования проекта:
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
make doc-doxygen
|
||||
make doc-breathe
|
||||
----
|
||||
|
||||
Шаблоны для комментирования файлов, классов и функций
|
||||
можно автоматически расставить в файлах исходных кодов
|
||||
исполнением цели `doc-add-comments` при наличии установленной
|
||||
программы `uncrustify`:
|
||||
|
||||
[source,cmake]
|
||||
----
|
||||
make doc-add-comments
|
||||
----
|
||||
|
@ -14,18 +14,18 @@ https://software.intel.com/en-us/parallel-studio-xe[дистрибутив] и
|
||||
скопировать его в полученный каталог.
|
||||
. Если есть файл лицензии `parallel_studio.lic`, скопировать его в
|
||||
каталог `/opt/intel/licenses`.
|
||||
. От суперпользователя установить в каталог `/opt/intel` командой
|
||||
`sudo ./install.sh -s silent.cfg`.
|
||||
. Добавить полномочия для сбора статистики:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
sudo setcap cap_sys_ptrace=eip /opt/intel/vtune_amplifier/bin64/amplxe-cl
|
||||
sudo setcap cap_sys_ptrace=eip /opt/intel/vtune_amplifier/bin64/amplxe-perf
|
||||
sudo setcap cap_sys_ptrace=eip /opt/intel/vtune_profiler/bin64/vtune
|
||||
sudo setcap cap_sys_ptrace=eip /opt/intel/vtune_profiler/bin64/amplxe-perf
|
||||
----
|
||||
|
||||
[arabic, start=5]
|
||||
. От суперпользователя установить в каталог `/opt/intel` командой
|
||||
`sudo ./install.sh -s silent.cfg`.
|
||||
. Создать образ
|
||||
[arabic, start=6]
|
||||
. Создать образ:
|
||||
`mksquashfs /opt/intel/* /home/user/intel.sfs -comp xz -Xbcj x86 -all-root -b 512K`
|
||||
. Удалить содержимое каталога `/opt/intel`.
|
||||
. Примонтировать образ:
|
||||
@ -35,5 +35,35 @@ sudo setcap cap_sys_ptrace=eip /opt/intel/vtune_amplifier/bin64/amplxe-perf
|
||||
[source,sh]
|
||||
----
|
||||
source /opt/intel/bin/compilervars.sh intel64
|
||||
source /opt/intel/vtune_amplifier/amplxe-vars.sh
|
||||
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
|
||||
----
|
||||
|
||||
|
129
wiki/Prog/Development/Настройка Qt Creator.adoc
Normal file
@ -0,0 +1,129 @@
|
||||
= Настройка Qt Creator
|
||||
:title-separator: {sp}|
|
||||
:category: Linux/Программы
|
||||
:tags: Linux, Qt, Qt Creator, C++,
|
||||
:toc:
|
||||
:icons: font
|
||||
include::{l10ndir}/{lang}.adoc[]
|
||||
|
||||
Перед настройкой Qt Creator желательно установить пакеты для разработки
|
||||
и выполнить дополнительные настройки:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
sudo apt-get install git ninja-build cmake uncrustify dos2unix doxygen
|
||||
sudo apt-get install clazy clang-tidy build-essential qt5-default
|
||||
git clone https://git.246060.ru/f1x1t/uncrustify-config ~/.config/uncrustify
|
||||
----
|
||||
|
||||
<<<
|
||||
|
||||
== Плагины
|
||||
|
||||
[.text-center]
|
||||
.menu:Справка[О модулях] (часть 1)
|
||||
image::qtcreator-setup/qtcreator21.png[qtcreator21,pdfwidth=70%,scaledwidth=90%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
[.text-center]
|
||||
.menu:Справка[О модулях] (часть 2)
|
||||
image::qtcreator-setup/qtcreator22.png[qtcreator22,pdfwidth=70%,scaledwidth=90%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
[.text-center]
|
||||
.menu:Справка[О модулях] (часть 3)
|
||||
image::qtcreator-setup/qtcreator23.png[qtcreator23,pdfwidth=70%,scaledwidth=90%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
[.text-center]
|
||||
.menu:Справка[О модулях] (часть 4)
|
||||
image::qtcreator-setup/qtcreator24.png[qtcreator24,pdfwidth=70%,scaledwidth=90%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
== Комплекты
|
||||
|
||||
[.text-center]
|
||||
.menu:Инструменты[Параметры > Комплекты > Комплекты]
|
||||
image::qtcreator-setup/qtcreator34.png[qtcreator34,pdfwidth=80%,scaledwidth=80%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
[.text-center]
|
||||
.menu:Инструменты[Параметры > Комплекты > Комплекты > Генератор CMake > Изменить]
|
||||
image::qtcreator-setup/qtcreator35.png[qtcreator35,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
<<<
|
||||
|
||||
== Среда
|
||||
|
||||
[.text-center]
|
||||
.menu:Инструменты[Параметры > Среда > Система]
|
||||
image::qtcreator-setup/qtcreator41.png[qtcreator41,pdfwidth=80%,scaledwidth=80%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
== Редактор
|
||||
|
||||
[.text-center]
|
||||
.menu:Инструменты[Параметры > Текстовый редактор > Поведение]
|
||||
image::qtcreator-setup/qtcreator42.png[qtcreator42,pdfwidth=80%,scaledwidth=80%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
|
||||
== C++
|
||||
|
||||
[.text-center]
|
||||
.menu:Инструменты[Параметры > С++ > Именование файлов]
|
||||
image::qtcreator-setup/qtcreator51.png[qtcreator51,pdfwidth=78%,scaledwidth=78%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
== Стилизатор
|
||||
|
||||
[.text-center]
|
||||
.menu:Инструменты[Параметры > Стилизатор > Uncrustify]
|
||||
image::qtcreator-setup/qtcreator55.png[qtcreator55,pdfwidth=78%,scaledwidth=78%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
|
||||
== Сборка и запуск
|
||||
|
||||
[.text-center]
|
||||
.menu:Инструменты[Параметры > Сборка и запуск > Основное]
|
||||
image::qtcreator-setup/qtcreator61.png[qtcreator61,pdfwidth=78%,scaledwidth=80%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
<<<
|
||||
|
||||
== To-Do
|
||||
|
||||
[.text-center]
|
||||
.menu:Инструменты[Параметры > To-Do]
|
||||
image::qtcreator-setup/qtcreator67.png[qtcreator67,pdfwidth=78%,scaledwidth=80%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
|
||||
== Импорт проекта на CMake
|
||||
|
||||
[.text-center]
|
||||
.menu:Импорт проекта[Настроить проект]
|
||||
image::qtcreator-setup/qtcreator74.png[qtcreator74,pdfwidth=80%,scaledwidth=80%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
== Сборка
|
||||
|
||||
[.text-center]
|
||||
.menu:Проект[Настройки сборки]
|
||||
image::qtcreator-setup/qtcreator81.png[qtcreator81,pdfwidth=80%,scaledwidth=80%,align="center"]
|
||||
|
@ -1,110 +0,0 @@
|
||||
= Настройка Qt Creator
|
||||
:title-separator: {sp}|
|
||||
:category: Linux/Программы
|
||||
:tags: Linux, Qt, QtCreator, C++,
|
||||
|
||||
Перед настройкой QtCreator желательно установить пакеты для разработки
|
||||
и выполнить дополнительные настройки:
|
||||
|
||||
[source,sh]
|
||||
----
|
||||
sudo apt-get install git ninja-build cmake uncrustify dos2unix doxygen
|
||||
sudo apt-get install clazy clang-tidy build-essential qt5-default
|
||||
git clone https://git.246060.ru/f1x1t/uncrustify-config ~/.config/uncrustify
|
||||
----
|
||||
|
||||
== Плагины
|
||||
|
||||
[.text-center]
|
||||
.Справка - О модулях (часть 1)
|
||||
image::qtcreator-setup/qtcreator21.png[qtcreator21,pdfwidth=80%,scaledwidth=80%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
[.text-center]
|
||||
.Справка - О модулях (часть 2)
|
||||
image::qtcreator-setup/qtcreator22.png[qtcreator22,pdfwidth=90%,scaledwidth=90%,align="center"]
|
||||
|
||||
{empty} +
|
||||
<<<
|
||||
|
||||
== Комплекты
|
||||
|
||||
[.text-center]
|
||||
.Инструменты - Параметры - Комплекты - Комплекты
|
||||
image::qtcreator-setup/qtcreator34.png[qtcreator34,pdfwidth=80%,scaledwidth=80%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
[.text-center]
|
||||
.Инструменты - Параметры - Комплекты - Комплекты - Генератор CMake - Изменить
|
||||
image::qtcreator-setup/qtcreator35.png[qtcreator35,align="center"]
|
||||
|
||||
{empty} +
|
||||
<<<
|
||||
|
||||
== Среда
|
||||
|
||||
[.text-center]
|
||||
.Инструменты - Параметры - Среда - Система
|
||||
image::qtcreator-setup/qtcreator41.png[qtcreator41,pdfwidth=80%,scaledwidth=80%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
== Редактор
|
||||
|
||||
[.text-center]
|
||||
.Инструменты - Параметры - Текстовый редактор - Поведение
|
||||
image::qtcreator-setup/qtcreator42.png[qtcreator42,pdfwidth=80%,scaledwidth=80%,align="center"]
|
||||
|
||||
{empty} +
|
||||
<<<
|
||||
|
||||
== C++
|
||||
|
||||
[.text-center]
|
||||
.Инструменты - Параметры - С++ - Именование файлов
|
||||
image::qtcreator-setup/qtcreator51.png[qtcreator51,pdfwidth=80%,scaledwidth=80%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
== Стилизатор
|
||||
|
||||
[.text-center]
|
||||
.Инструменты - Параметры - Стилизатор - Uncrustify
|
||||
image::qtcreator-setup/qtcreator55.png[qtcreator55,pdfwidth=80%,scaledwidth=80%,align="center"]
|
||||
|
||||
{empty} +
|
||||
<<<
|
||||
|
||||
== Сборка и запуск
|
||||
|
||||
[.text-center]
|
||||
.Инструменты - Параметры - Сборка и запуск - Основное
|
||||
image::qtcreator-setup/qtcreator61.png[qtcreator61,pdfwidth=80%,scaledwidth=80%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
== To-Do
|
||||
|
||||
[.text-center]
|
||||
.Инструменты - Параметры - To-Do
|
||||
image::qtcreator-setup/qtcreator67.png[qtcreator67,pdfwidth=80%,scaledwidth=80%,align="center"]
|
||||
|
||||
{empty} +
|
||||
<<<
|
||||
|
||||
== Импорт проекта на CMake
|
||||
|
||||
[.text-center]
|
||||
.Импорт проекта - Настроить проект
|
||||
image::qtcreator-setup/qtcreator74.png[qtcreator74,pdfwidth=80%,scaledwidth=80%,align="center"]
|
||||
|
||||
{empty} +
|
||||
|
||||
== Сборка
|
||||
|
||||
[.text-center]
|
||||
.Проект - Настройки сборки
|
||||
image::qtcreator-setup/qtcreator81.png[qtcreator81,pdfwidth=80%,scaledwidth=80%,align="center"]
|
||||
|
@ -3,6 +3,7 @@
|
||||
:category: Программирование
|
||||
:tags: Linux, файлы, каталоги, программирование, cmake
|
||||
:toc:
|
||||
include::{l10ndir}/{lang}.adoc[]
|
||||
|
||||
Для операционных систем типа Linux принят стандарт
|
||||
https://ru.wikipedia.org/wiki/FHS[FHS] («стандарт иерархии файловой
|
||||
@ -73,8 +74,6 @@ https://ru.wikipedia.org/wiki/FHS[FHS] («стандарт иерархии фа
|
||||
| systemLogDirectory() | Полный путь к системному каталогу с журналами работы
|
||||
| executableFileDirectory() | Полный путь к каталогу с исполняемым файлом
|
||||
| executableFileName() | Имя исполняемого файла
|
||||
| configFilePath() | Полный путь к файлу настройки
|
||||
| configFileName() | Имя файла настройки
|
||||
| projectName() | Имя подкаталога для проекта
|
||||
|===
|
||||
|
||||
@ -86,7 +85,7 @@ https://ru.wikipedia.org/wiki/FHS[FHS] («стандарт иерархии фа
|
||||
namespace MF = myx::filesystem;
|
||||
|
||||
MF::Paths& paths = MF::Paths::instance();
|
||||
paths.init( QStringLiteral( "project_name" ), QStringLiteral( "conf" ) );
|
||||
paths.init();
|
||||
qDebug() << paths.systemConstDataDirectory().path();
|
||||
----
|
||||
|
||||
@ -101,8 +100,9 @@ qDebug() << paths.systemConstDataDirectory().path();
|
||||
данных и журналов. Эти значения не зависят от расположения исполняемого файла,
|
||||
а определяются в соответствии со значениям переменных окружения `HOME`,
|
||||
`TMPDIR`, `XDG_CONFIG_HOME` и `XDG_DATA_HOME`, либо устанавливаются значения,
|
||||
принятые в стандартах. Пример имён каталогов для пользователя `user`
|
||||
и проекта `project` приведён в таблице.
|
||||
принятые в стандартах. Пример имён каталогов для пользователя `user`,
|
||||
названия организации `org`, названия выполняемой работы `theme` и проекта
|
||||
`project` приведён в таблице.
|
||||
|
||||
.Стандартные каталоги для текущего пользователя
|
||||
[cols="4,4m,6m",options="header"]
|
||||
@ -110,10 +110,10 @@ qDebug() << paths.systemConstDataDirectory().path();
|
||||
| Назначение каталога | Метод | Значение
|
||||
| Домашний каталог | homeDirectory() | /home/user
|
||||
| Временные файлы | tempDirectory() | /tmp
|
||||
| Файлы настройки | userConfigDirectory() | /home/user/.config/project
|
||||
| Неизменяемые файлы | userConstDataDirectory() | /home/user/.local/share/project/data
|
||||
| Изменяемые файлы | userVarDataDirectory() | /home/user/.local/share/project/lib
|
||||
| Журналы работы | userLogDirectory() | /home/user/.local/share/project/log
|
||||
| Файлы настройки | userConfigDirectory() | /home/user/.config/org-theme/project
|
||||
| Неизменяемые файлы | userConstDataDirectory() | /home/user/.local/share/org-theme/project/share
|
||||
| Изменяемые файлы | userVarDataDirectory() | /home/user/.local/share/org-theme/project/var
|
||||
| Журналы работы | userLogDirectory() | /home/user/.local/share/org-theme/project/log
|
||||
|===
|
||||
|
||||
=== Общая проверка
|
||||
@ -132,9 +132,9 @@ IMPORTANT: При проверке типов иерархии всегда пр
|
||||
|
||||
=== Проверка на работу в иерархии `/opt`
|
||||
|
||||
Если полный путь к исполняемому файлу начинается c `/opt` и
|
||||
Если полный путь к исполняемому файлу начинается с `/opt` и
|
||||
содержит в себе название текущего проекта, например
|
||||
`/opt/org/project/bin/application`, то выполняется проверка
|
||||
`/opt/org-theme/project/bin/application`, то выполняется проверка
|
||||
на наличие сопутствующих системных каталогов. Если они присутствуют,
|
||||
то принимается решение, что окружение в иерархии `/opt` сформировано правильно,
|
||||
иначе делается заключение о том, что файлы всех типов находятся
|
||||
@ -146,17 +146,17 @@ IMPORTANT: При проверке типов иерархии всегда пр
|
||||
[cols="4,4m,5m",options="header"]
|
||||
|===
|
||||
| Назначение файла / каталога | Метод | Значение
|
||||
| Исполняемый файл | executableFilePath() | /opt/org/project/bin/application
|
||||
| Файлы настройки | systemConfigDirectory() | /opt/org/project/etc
|
||||
| Неизменяемые файлы | systemConstDataDirectory() | /opt/org/project/files/data
|
||||
| Изменяемые файлы | systemVarDataDirectory() | /opt/org/project/files/lib
|
||||
| Журналы работы | systemLogDirectory() | /opt/org/project/files/log
|
||||
| Исполняемый файл | executableFilePath() | /opt/org-theme/project/bin/application
|
||||
| Файлы настройки | systemConfigDirectory() | /opt/org-theme/project/etc
|
||||
| Неизменяемые файлы | systemConstDataDirectory() | /opt/org-theme/project/share
|
||||
| Изменяемые файлы | systemVarDataDirectory() | /opt/org-theme/project/var
|
||||
| Журналы работы | systemLogDirectory() | /opt/org-theme/project/log
|
||||
|===
|
||||
|
||||
|
||||
=== Проверка на работу в иерархии `/usr/local`
|
||||
|
||||
Если полный путь к исполняемому файлу начинается c `/usr/local`,
|
||||
Если полный путь к исполняемому файлу начинается с `/usr/local`,
|
||||
например `/usr/local/bin/application`, то выполняется проверка
|
||||
на наличие сопутствующих системных каталогов. Если они присутствуют,
|
||||
то принимается решение, что окружение в иерархии `/usr/local` сформировано правильно,
|
||||
@ -179,7 +179,7 @@ IMPORTANT: При проверке типов иерархии всегда пр
|
||||
|
||||
=== Проверка на работу в иерархии `/usr`
|
||||
|
||||
Если полный путь к исполняемому файлу начинается c `/usr`,
|
||||
Если полный путь к исполняемому файлу начинается с `/usr`,
|
||||
например `/usr/bin/application`, то выполняется проверка
|
||||
на наличие сопутствующих системных каталогов. Если они присутствуют,
|
||||
то принимается решение, что окружение в иерархии `/usr` сформировано правильно,
|
||||
@ -202,7 +202,7 @@ IMPORTANT: При проверке типов иерархии всегда пр
|
||||
|
||||
=== Проверка на работу в домашнем каталоге
|
||||
|
||||
Если полный путь к исполняемому файлу начинается c `/home/user/bin` или
|
||||
Если полный путь к исполняемому файлу начинается с `/home/user/bin` или
|
||||
`/home/user/.local/bin`, например `/home/user/bin/application`, то выполняется
|
||||
проверка на наличие сопутствующих системных каталогов. Если они присутствуют,
|
||||
то принимается решение, что окружение в домашнем каталоге сформировано правильно,
|
||||
@ -216,10 +216,10 @@ IMPORTANT: При проверке типов иерархии всегда пр
|
||||
|===
|
||||
| Назначение файла / каталога | Метод | Значение
|
||||
| Исполняемый файл | executableFilePath() | /home/user/bin/application
|
||||
| Файлы настройки | systemConfigDirectory() | /home/user/.config/project
|
||||
| Неизменяемые файлы | systemConstDataDirectory() | /home/user/.local/share/project/data
|
||||
| Изменяемые файлы | systemVarDataDirectory() | /home/user/.local/share/project/lib
|
||||
| Журналы работы | systemLogDirectory() | /home/user/.local/share/project/log
|
||||
| Файлы настройки | systemConfigDirectory() | /home/user/.config/org-theme/project
|
||||
| Неизменяемые файлы | systemConstDataDirectory() | /home/user/.local/share/org-theme/project/share
|
||||
| Изменяемые файлы | systemVarDataDirectory() | /home/user/.local/share/org-theme/project/var
|
||||
| Журналы работы | systemLogDirectory() | /home/user/.local/share/org-theme/project/log
|
||||
|===
|
||||
|
||||
|
||||
@ -234,6 +234,7 @@ IMPORTANT: При проверке типов иерархии всегда пр
|
||||
то принимается решение, что окружение сформировано правильно,
|
||||
иначе делается заключение о том, что файлы всех типов находятся
|
||||
в одном каталоге с исполняемым и на этом проверки заканчиваются.
|
||||
|
||||
Пример правильной структуры каталогов для данной иерархии приведён в таблице.
|
||||
|
||||
.Каталоги при работе в окружении для разработки
|
||||
@ -241,10 +242,10 @@ IMPORTANT: При проверке типов иерархии всегда пр
|
||||
|===
|
||||
| Назначение файла / каталога | Метод | Значение
|
||||
| Исполняемый файл | executableFilePath() | /home/user/work/project/_build/debug/bin/application
|
||||
| Файлы настройки | systemConfigDirectory() | /home/user/work/project/_build/debug/etc/
|
||||
| Неизменяемые файлы | systemConstDataDirectory() | /home/user/work/project/_build/debug/files/data
|
||||
| Изменяемые файлы | systemVarDataDirectory() | /home/user/work/project/_build/debug/files/lib
|
||||
| Журналы работы | systemLogDirectory() | /home/user/work/project/_build/debug/files/log
|
||||
| Файлы настройки | systemConfigDirectory() | /home/user/work/project/_build/debug/etc
|
||||
| Неизменяемые файлы | systemConstDataDirectory() | /home/user/work/project/_build/debug/share
|
||||
| Изменяемые файлы | systemVarDataDirectory() | /home/user/work/project/_build/debug/var
|
||||
| Журналы работы | systemLogDirectory() | /home/user/work/project/_build/debug/log
|
||||
|===
|
||||
|
||||
|
||||
|
44
wiki/Prog/Development/ЧАВО.adoc
Normal file
@ -0,0 +1,44 @@
|
||||
= Разные вопросы и ответы
|
||||
:title-separator: {sp}|
|
||||
:category: Linux/Программы
|
||||
:tags: Linux, Qt, Qt Creator, C++,
|
||||
:toc:
|
||||
:icons: font
|
||||
include::{l10ndir}/{lang}.adoc[]
|
||||
|
||||
[QUESTION]
|
||||
====
|
||||
|
||||
[float]
|
||||
==== Проект на CMake перестал настраиваться.
|
||||
|
||||
Сообщения вида:
|
||||
|
||||
----
|
||||
Не удалось разобрать проект CMake: потеряно соединение с сервером CMake.
|
||||
----
|
||||
====
|
||||
|
||||
[ANSWER]
|
||||
====
|
||||
. Закрыть проект в Qt Creator
|
||||
. Удалить файл `CMakeLists.txt.user` и целевой каталог сборки, например `_build`
|
||||
. Открыть проект в Qt Creator
|
||||
====
|
||||
|
||||
|
||||
[QUESTION]
|
||||
====
|
||||
|
||||
[float]
|
||||
==== Отсутствует необходимый для сборки пакет.
|
||||
Пример:
|
||||
|
||||
image::qtcreator-setup/errors01.png[errors01,align="center"]
|
||||
====
|
||||
|
||||
[ANSWER]
|
||||
====
|
||||
. Установить недостающий пакет
|
||||
. Выполнить menu:Сборка[Запустить CMake]
|
||||
====
|
@ -62,9 +62,9 @@ untracked -> staged: git add
|
||||
staged -> unmodified: git commit
|
||||
unmodified -> modified: редактирование
|
||||
modified -> staged: git add
|
||||
modified -> untracked: git rm --cached
|
||||
unmodified -> untracked: git rm --cached
|
||||
staged -> untracked: git rm --cached
|
||||
modified -> untracked: git rm ~--cached
|
||||
unmodified -> untracked: git rm ~--cached
|
||||
staged -> untracked: git rm ~--cached
|
||||
@enduml
|
||||
----
|
||||
|
||||
@ -125,7 +125,7 @@ participant remote as "Удалённый репозиторий\n(remote rep
|
||||
[-> workspace : <font color=red>Начало работы</font>
|
||||
activate workspace
|
||||
remote -> local : <font color=red>Получение изменений с сервера</font>\n<b>git fetch</b>
|
||||
remote -> local : <font color=red>Обновление подмодулей</font>\n<b>git submodule update --recursive --init</b>
|
||||
remote -> local : <font color=red>Обновление подмодулей</font>\n<b>git submodule update ~--recursive ~--init</b>
|
||||
workspace <-> local : <font color=red>Просмотр информации</font>\n<b>git status</b>
|
||||
workspace <-> local : <font color=red>Переход на ветку master</font>\n<b>git checkout master</b>
|
||||
local -> workspace : <font color=red>Слияние с удалённой веткой</font>\n<b>git merge origin/master</b>
|
||||
@ -135,11 +135,45 @@ workspace ->o workspace : <font color=red>Редактирование</font>
|
||||
workspace <-> local : <font color=red>Просмотр изменений</font>\n<b>git diff</b>
|
||||
workspace -> index : <font color=red>Занесение файлов в индекс</font>\n<b>git add</b>
|
||||
index -> local : <font color=red>Фиксация изменений</font>\n<b>git commit</b>
|
||||
local ->o local : <font color=red>Присвоение ветки осмысленного названия</font>\n<b>git branch -m temp branch_name</b>
|
||||
local ->o local : <font color=red>Переход на ветку</font>\n<b>git checkout branch_name</b>
|
||||
local ->o local : <font color=red>Присвоение ветки осмысленного названия</font>\n<b>git branch -m temp new_task</b>
|
||||
local ->o local : <font color=red>Переход на ветку</font>\n<b>git checkout new_task</b>
|
||||
remote -> local : <font color=red>Получение изменений с сервера</font>\n<b>git fetch</b>
|
||||
local ->o local : <font color=red>Слияние изменений с сервера в текущую ветку (branch_name)</font>\n<b>git merge origin/master</b>
|
||||
local -> remote : <font color=red>Отправка ветки на сервер</font>\n<b>git push origin branch_name</b>
|
||||
local ->o local : <font color=red>Слияние изменений с сервера в текущую ветку (new_task)</font>\n<b>git merge origin/master</b>
|
||||
local -> remote : <font color=red>Отправка ветки на сервер</font>\n<b>git push origin new_task</b>
|
||||
remote ->] : <font color=red>Создание запроса на слияние</font>
|
||||
deactivate workspace
|
||||
@enduml
|
||||
----
|
||||
|
||||
Альтернативный пример действий, выполняемых пользователем в совместном
|
||||
проекте, приведён на <<workflow-alt,диаграмме>>.
|
||||
|
||||
[[workflow-alt]]
|
||||
[.text-center]
|
||||
.Альтернативная последовательность действий
|
||||
[plantuml]
|
||||
----
|
||||
@startuml
|
||||
skinparam defaultFontSize 24
|
||||
skinparam padding 16
|
||||
|
||||
participant workspace as "Рабочий каталог\n(working dir)"
|
||||
participant index as "Индекс\n(index)" #77FF77
|
||||
participant local as "Локальный репозиторий\n(local repository)" #FF7777
|
||||
participant remote as "Удалённый репозиторий\n(remote repository)" #7777FF
|
||||
|
||||
[-> workspace : <font color=red>Начало работы</font>
|
||||
activate workspace
|
||||
workspace <-> local : <font color=red>Переход на локальную ветку master</font>\n<b>git checkout master</b>
|
||||
remote -> workspace : <font color=red>Слияние с удалённой веткой и обновление рабочего каталога</font>\n<b>git pull</b>
|
||||
workspace <-> local : <font color=red>Создание новой ветки</font>\n<b>git checkout -b new_task</b>
|
||||
workspace ->o workspace : <font color=red>Редактирование</font>
|
||||
workspace <-> local : <font color=red>Просмотр изменений</font>\n<b>git diff</b>
|
||||
workspace -> index : <font color=red>Занесение файлов в индекс</font>\n<b>git add</b>
|
||||
index -> local : <font color=red>Фиксация изменений</font>\n<b>git commit</b>
|
||||
remote -> local : <font color=red>Получение изменений с сервера</font>\n<b>git fetch</b>
|
||||
local ->o local : <font color=red>Слияние изменений с сервера в текущую ветку (new_task)</font>\n<b>git merge origin/master</b>
|
||||
local -> remote : <font color=red>Отправка ветки на сервер</font>\n<b>git push origin new_task</b>
|
||||
remote ->] : <font color=red>Создание запроса на слияние</font>
|
||||
deactivate workspace
|
||||
@enduml
|
||||
|
18
wiki/Prog/Links/Статьи.adoc
Normal file
@ -0,0 +1,18 @@
|
||||
= Сайты и статьи по программированию
|
||||
:category: Программирование
|
||||
:tags: программирование, C, C++, Qt,
|
||||
|
||||
:toc:
|
||||
|
||||
== С++
|
||||
|
||||
* https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines[C++ Core Guidelines]
|
||||
|
||||
== Qt
|
||||
|
||||
* https://woboq.com/blog/how-qt-signals-slots-work.html[How Qt Signals and Slots Work]
|
||||
|
||||
== Оптимизация
|
||||
|
||||
* https://www.agner.org/optimize[Agner's software optimization resources]
|
||||
* https://jjj.de[jj's pages (FXT library and Matters Computational)]
|
BIN
wiki/images/cmake-fixes/clang-tidy1.png
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
wiki/images/cmake-fixes/clang-tidy2.png
Normal file
After Width: | Height: | Size: 167 KiB |
BIN
wiki/images/cmake-fixes/clazy1.png
Normal file
After Width: | Height: | Size: 90 KiB |
BIN
wiki/images/cmake-fixes/clazy2.png
Normal file
After Width: | Height: | Size: 166 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 |
BIN
wiki/images/qtcreator-setup/errors01.png
Normal file
After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 117 KiB |
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 95 KiB |
BIN
wiki/images/qtcreator-setup/qtcreator23.png
Normal file
After Width: | Height: | Size: 78 KiB |
BIN
wiki/images/qtcreator-setup/qtcreator24.png
Normal file
After Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 119 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 102 KiB |
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 88 KiB |