Compare commits

...

71 Commits

Author SHA1 Message Date
9206a9ff3a Все подмодули на собственном сервере 2022-01-15 16:44:37 +03:00
25b194750e Обновление 2022-01-15 15:36:41 +03:00
25491b80c4 Обновление 2021-12-24 16:51:35 +03:00
8c3a99eff9 Обновление 2021-12-24 16:02:12 +03:00
a2cca2dd8c Обновление 2021-12-13 23:10:12 +03:00
8e3f80d82c Обновление 2021-10-20 10:11:49 +03:00
763ec72402 Обновление 2021-08-27 12:15:49 +03:00
7505316c2c Обновление 2021-06-08 11:22:28 +03:00
8639788c93 update 2020-11-02 09:43:29 +03:00
0e27e5e68d update 2020-11-02 08:14:58 +03:00
578274e444 Обновление подмодулей 2020-10-11 21:01:41 +03:00
2de1503574 Обновление 2020-10-11 20:49:26 +03:00
64e5aa161f Обновление 2020-10-11 20:48:22 +03:00
2b629c9dc9 Правка 2020-06-30 16:30:57 +03:00
6579472659 update 2020-05-01 17:17:34 +03:00
61fa5230ae update 2020-04-29 14:08:15 +03:00
dd840cdbc9 update 2020-04-24 22:25:49 +03:00
8fa46a57be update 2020-04-24 22:23:00 +03:00
e1bfd02131 update 2020-04-24 22:19:20 +03:00
0afb335879 update 2020-04-24 22:18:54 +03:00
daf7136008 update 2020-04-24 22:09:59 +03:00
d14d71910c update 2020-04-24 22:07:03 +03:00
1c6f6c4945 update 2020-04-24 21:56:56 +03:00
bf875c1842 update 2020-04-24 21:52:36 +03:00
373fe00cb3 update 2020-04-24 21:48:16 +03:00
b2cfbfafca update 2020-04-24 21:43:15 +03:00
c3930f59f9 update 2020-04-24 21:41:09 +03:00
1a7e8c5a56 update 2020-04-24 21:38:35 +03:00
2af87bc633 update 2020-04-24 21:35:56 +03:00
5b2ac484f8 update 2020-04-24 21:17:29 +03:00
cc81e6ac8c update 2020-04-24 21:14:17 +03:00
79193d4152 update 2020-04-22 23:07:53 +03:00
71cbd8a230 update 2020-04-22 14:14:07 +03:00
11d1c31ce7 update 2020-04-21 09:03:22 +03:00
6353b7839e update 2020-04-21 08:54:54 +03:00
4fdc1e4951 update 2020-04-21 06:43:14 +03:00
562d2ecddf update 2020-04-21 06:42:52 +03:00
101ea1880d update 2020-04-21 06:13:09 +03:00
72e6b66a52 qa 2020-04-21 06:02:52 +03:00
3617a09b2e update 2020-04-20 23:41:13 +03:00
3d3aac6206 update 2020-04-20 23:33:51 +03:00
12c6f6396f update 2020-04-20 23:27:44 +03:00
6897baf6c6 update 2020-04-20 23:27:17 +03:00
8b92ccf57a update 2020-04-20 23:26:37 +03:00
057a213a80 update 2020-04-20 23:17:35 +03:00
af643e1e35 update 2020-04-20 22:57:17 +03:00
363822b166 update 2020-04-20 22:48:38 +03:00
c723a9d7b5 update 2020-04-20 22:38:06 +03:00
33ead8f7e6 update 2020-04-20 22:32:29 +03:00
3cfc262a3d update 2020-04-20 22:19:11 +03:00
bc250dd0bf update 2020-04-20 22:12:56 +03:00
0d83b3637c update 2020-04-20 22:10:35 +03:00
6bd1d03d3b update 2020-04-20 22:04:39 +03:00
32853cc8f4 update 2020-04-20 22:00:59 +03:00
311c812181 update 2020-04-19 12:19:24 +03:00
d4bc574a94 update 2020-04-19 12:16:43 +03:00
876ff1ade5 update 2020-04-19 12:10:42 +03:00
afa58987da update 2020-04-19 12:05:06 +03:00
0643cb5f73 Обновление 2020-04-19 11:59:02 +03:00
4717bd0336 update 2020-04-19 11:36:02 +03:00
36d088e75c clazy 2020-04-19 11:31:30 +03:00
ac859dc4ec update 2020-04-16 15:50:41 +03:00
e0a18fc66d update 2020-04-16 12:47:23 +03:00
b0a8898f1f update 2020-04-16 10:12:02 +03:00
9857fa778d update 2020-04-16 10:01:56 +03:00
7da59f9b83 update 2020-04-16 09:50:22 +03:00
e208752f44 update 2020-04-16 09:40:45 +03:00
78ecf3b655 update 2020-04-16 09:30:46 +03:00
12dbf54505 update 2020-04-16 09:27:26 +03:00
3858c49164 Пример подключения переводов 2020-04-16 01:05:11 +03:00
dfd884e36b Правильная локализация 2020-04-16 01:03:34 +03:00
43 changed files with 2472 additions and 298 deletions

5
.gitignore vendored
View File

@ -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
View File

@ -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

View File

@ -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
View 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
View 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

View File

@ -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

View 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
----

View 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
----

File diff suppressed because it is too large Load Diff

View 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
----

View File

@ -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
----

View 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"]

View File

@ -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"]

View File

@ -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
|===

View 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]
====

View File

@ -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

View 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)]

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 88 KiB