From d07e6a66f89a249630baf1423fbe46c47726c85f Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Thu, 9 Apr 2020 20:10:52 +0300 Subject: [PATCH] update --- themes/bootstrap4 | 2 +- .../CMake управление проектом.adoc | 61 +++++++++++-------- 2 files changed, 35 insertions(+), 28 deletions(-) diff --git a/themes/bootstrap4 b/themes/bootstrap4 index ce6b186..228f4e0 160000 --- a/themes/bootstrap4 +++ b/themes/bootstrap4 @@ -1 +1 @@ -Subproject commit ce6b18660a933855dbe996fc5b5d3d0ac1c25223 +Subproject commit 228f4e026bcf020b4efcbc1684e2c67ff38ee4e5 diff --git a/wiki/Prog/Development/CMake управление проектом.adoc b/wiki/Prog/Development/CMake управление проектом.adoc index 55e986f..5f1267a 100644 --- a/wiki/Prog/Development/CMake управление проектом.adoc +++ b/wiki/Prog/Development/CMake управление проектом.adoc @@ -132,7 +132,8 @@ git submodule add git@git.246060.ru:f1x1t/uncrustify-config.git cmake/etc/uncrus git commit -a -m "Начало проекта" ---- -Отправить изменения в проекте на сервер и сделать ветку `master` основной: +Отправить изменения в проекте на сервер и сделать ветку `master` основной +(можно пропустить): [source,sh] ---- @@ -281,52 +282,54 @@ git commit -m "Подключение библиотеки CMLib" == Поиск системных библиотек -Системные библиотеки можно искать с помощью программы `pkgconfig`, -которая хранит базу данных параметров, включающую пути к заголовочным -файлами и перечни библиотек, необходимых для компоновки. Сначала -производится наличие модуля `PkgConfig`, в котором определена функция -`pkg_check_modules`, которая и осуществляет поиск. Например, для поиска -библиотек `gsl`, `fftw3` и `udev` можно написать в файле `CMakeLists.txt`: +Поиск программ, библиотек и заголовочных файлов, установленных в системе, можно +выполнять с помощью программы https://en.wikipedia.org/wiki/Pkg-config[`pkg-config`] +или функции CMake `find_package`. В любом случае для указания того, +что наличие искомого объекта обязательно для сборки, используется +параметр `REQUIRED`. + +=== Поиск с помощью программы `pkg-config` + +Программа `pkg-config` хранит базу данных параметров (обычно в каталогах +`/usr/share/pkgconfig`, `/usr/lib/pkgconfig` и `/usr/lib/x86_64-linux-gnu/pkgconfig`), +содержащую флаги компиляции для поиска заголовочных файлов и компоновки +библиотек, установленных в систему. Для использования в CMake сначала +необходимо выполнить проверку наличия программы `pkg-config` в системе +и подключить определённую в модуле `PkgConfig` функцию `pkg_check_modules`. +Например, для поиска библиотек `gsl`, `fftw3` и `udev` можно написать +в файле `CMakeLists.txt`: [source,cmake] ---- # Поиск библиотек с помощью pkgconfig -find_package(PkgConfig) +find_package(PkgConfig REQUIRED) pkg_check_modules(GSL REQUIRED gsl) pkg_check_modules(FFTW3 REQUIRED fftw3) pkg_check_modules(UDEV udev) ---- -Если системная библиотека поставляется без файла описания для -`pkgconfig`, то для её поиска может быть написан специальный модуль для -`CMake`, который вызывается функцией `find_package`. Кроме того функция -`find_package` может возвращать дополнительные значения, например, пути -к исполняемым файлам. +=== Поиск с помощью функции `find_package` + +Если системная библиотека поставляется без файла описания для `pkg-config` +или необходимо произвести более сложный поиск, например, включающий поиск +исполняемого файла, то может быть написан специальный модуль для `CMake`, +который вызывается функцией `find_package`. Примеры вызова функции: [source,cmake] ---- # Поиск с помощью функции find_package find_package(LibXml2) -find_package(CURL) +find_package(CURL REQUIRED) ---- -Если для библиотеки нет модуля, выполняющего её поиск, то можно -произвести поиск с помощью функции `find_library`. Например, - -[source,cmake] ----- -# Поиск библиотеки с помощью функции find_library -find_library(MATHGL mgl PATHS /usr/lib /usr/lib/x86_64-linux-gnu) -find_library(MATHGLQT5 mgl-qt5 PATHS /usr/lib /usr/lib/x86_64-linux-gnu) ----- == Автоматически генерируемый заголовочный файл -На этапе конфигурирования проекта можно создать файл, в который будут -записаны параметры, полученные на данной стадии. В библиотеке CMLib +На этапе конфигурирования проекта можно сгенерировать файл, в который +будут записаны собранные значения параметров. В библиотеке CMLib присутствует функция `cmlib_config_hpp_generate()`, создающая файл -`${CMAKE_BUILD_DIR}/include/cmlib_config.hpp`, в который записывается -информация о имени и версии проекта, дате и типе сборки. +`${CMAKE_BINARY_DIR}/include/cmlib_private_config.hpp`, в который +записывается информация о имени и версии проекта, дате и типе сборки. [source,cmake] ---- @@ -334,6 +337,10 @@ find_library(MATHGLQT5 mgl-qt5 PATHS /usr/lib /usr/lib/x86_64-linux-gnu) cmlib_config_hpp_generate() ---- + + + + == Базовая библиотека В файле `cmex/CMakeLists.txt` должна быть строка, включающая поиск файла