diff --git a/plugins/thirdparty/asciidoctor b/plugins/thirdparty/asciidoctor index 288c5ae..b271b3e 160000 --- a/plugins/thirdparty/asciidoctor +++ b/plugins/thirdparty/asciidoctor @@ -1 +1 @@ -Subproject commit 288c5aeba001bc605d20c573c37d1fb9384262e8 +Subproject commit b271b3ed553a3e00f9fa079384e94a27c68ff550 diff --git a/themes/bootstrap4 b/themes/bootstrap4 index ce6b186..c651ba0 160000 --- a/themes/bootstrap4 +++ b/themes/bootstrap4 @@ -1 +1 @@ -Subproject commit ce6b18660a933855dbe996fc5b5d3d0ac1c25223 +Subproject commit c651ba0ef064734b6457684c780f8c863f0956bf diff --git a/wiki/Prog/Development/CMake управление проектом.adoc b/wiki/Prog/Development/CMake управление проектом.adoc index 4b3ba3d..e727170 100644 --- a/wiki/Prog/Development/CMake управление проектом.adoc +++ b/wiki/Prog/Development/CMake управление проектом.adoc @@ -96,7 +96,9 @@ выпуск, появляется необходимость корректного полного удаления результатов предыдущего тип сборки. -== Начало проекта + +[[base-project]] +== Базовый проект Проект, в котором выполнены приведённые в данном разделе действия, можно посмотреть https://git.246060.ru/f1x1t/cmlib-example-base[здесь] @@ -124,11 +126,11 @@ git init [source,sh] ---- -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 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 "Начало проекта" ---- @@ -375,83 +377,157 @@ cpack == Примеры библиотек и приложений -Напишу позже. +=== Базовая библиотека +Проект с базовой библиотекой реализован на основе <>. +Исходные тексты содержат комментарии, объясняющие назначение используемых функций. +Проект можно посмотреть https://git.246060.ru/f1x1t/cmlib-example-library[здесь] +или сделать его копию командой: +[source,sh] +---- +git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-library +---- - -== Базовая библиотека - -В файле `cmex/CMakeLists.txt` должна быть строка, включающая поиск файла -`CMakeLists.txt` в подкаталоге `src/lib`: +В файл `CMakeLists.txt`, находящийся в корневом каталоге проекта, нужно добавить: [source,cmake] ---- -add_subdirectory(src/libcmex) +# Поиск библиотеки Boost +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) + +# Автоматически генерируемый заголовочный файл +cmlib_config_hpp_generate() + +# Каталог с исходными текстами библиотеки +add_subdirectory(src/cmlib-example) + +# Документация +add_subdirectory(cmake/doc) + +# Создание вспомогательных символических ссылок +add_dependencies(cmlib-example create_auxilary_symlinks) ---- -В каталоге `cmex/src/libcmex` нужно создать файл `cmex.hpp`: -[source,cpp] ----- -#ifndef LIBCMEX_CMEX_HPP_ -#define LIBCMEX_CMEX_HPP_ - -#include - -int32_t cmex_init(int32_t i); - -#endif // LIBCMEX_CMEX_HPP_ ----- - -файл `cmex.cpp`: - -[source,cpp] ----- -#include "cmex.hpp" - -int32_t cmex_init(int32_t i = 0) { - return i; -} ----- - -и файл `CMakeLists.txt`: +В подкаталоге `src/cmlib-example` нужно создать файл `CMakeLists.txt`: [source,cmake] ---- # Название основной цели и имя библиотеки в текущем каталоге -set(current_target cmex) +set(TRGT cmlib-example) # Список файлов исходных текстов -set(current_target_sources - ${CMAKE_CURRENT_SOURCE_DIR}/cmex.cpp -) +set(TRGT_sources + ${CMAKE_CURRENT_SOURCE_DIR}/init.cpp) # Список заголовочных файлов (используется для установки) -set(current_target_headers - ${CMAKE_CURRENT_SOURCE_DIR}/cmex.hpp -) +set(TRGT_headers + ${CMAKE_CURRENT_SOURCE_DIR}/init.hpp) -add_common_library(TARGET ${current_target} SOURCES ${current_target_sources}) -common_target_properties(${current_target}) +# Функция для создания цели, результатом которой будет сборка библиотеки +add_common_library(TARGET ${TRGT} SOURCES ${TRGT_sources}) +common_target_properties(${TRGT}) -# Цель, используемая только для установки заголовочных файлов, без компиляции проекта -add_custom_target(${current_target}-install-headers - COMMAND "${CMAKE_COMMAND}" - -DCMAKE_INSTALL_COMPONENT=headers -P "${CMAKE_BINARY_DIR}/cmake_install.cmake" - ) +# Добавление к пути поиска заголовочных файлов +target_include_directories(${TRGT} SYSTEM PUBLIC ${Boost_INCLUDE_DIRS}) -# Правила для установки -install(TARGETS ${current_target}_static ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) +# Цель, используемая только для установки +# заголовочных файлов без компиляции проекта +add_custom_target( + ${TRGT}-install-headers + COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=headers -P + "${CMAKE_BINARY_DIR}/cmake_install.cmake") + +# Установка статической библиотеки +install(TARGETS ${TRGT}_static + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + +# Установка динамической библиотеки if(BUILD_SHARED_LIBS) - install(TARGETS ${current_target}_shared LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + install(TARGETS ${TRGT}_shared + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() -install(FILES ${CMAKE_BINARY_DIR}/include/cmlib_config.hpp ${current_target_headers} - COMPONENT headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${current_target}) + +# Установка заголовочных файлов +install( + FILES ${TRGT}_headers + COMPONENT headers + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${TRGT}) + +# Установка файла для pkg-config +install(FILES ${CMAKE_BINARY_DIR}/${TRGT}.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) ---- -== Базовое приложение + +файл `init.hpp`: + +[source,cpp] +---- +#ifndef CMLIB_EXAMPLE_HPP_ +#define CMLIB_EXAMPLE_HPP_ + +#include + +int32_t cmlib_example_init(int32_t i); + +#endif // CMLIB_EXAMPLE_HPP_ +---- + +и файл `init.cpp`: + +[source,cpp] +---- +#include "init.hpp" + +#include + +int32_t cmlib_example_init(int32_t i = 0) +{ + int32_t s = 0; + for ( auto r : boost::counting_range( 1, i ) ) + { + s += r; + } + return s; +} +---- + + + +ПИШУ ЗДЕСЬ!!! + + + +=== Базовое приложение + +Проект с базовым приложением реализован на основе <>. +Исходные тексты содержат комментарии, объясняющие назначение используемых функций. +Проект можно посмотреть https://git.246060.ru/f1x1t/cmlib-example-application[здесь] +или сделать его копию командой: + +[source,sh] +---- +git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-application +---- + +В файл `CMakeLists.txt`, находящийся в корневом каталоге проекта, нужно добавить: + + + + + + + + + + + В файле `cmex/CMakeLists.txt` должна быть строка, включающая поиск файла `CMakeLists.txt` в подкаталоге `src/cmex`: @@ -521,6 +597,8 @@ target_link_libraries(${current_target} cmex_static) install(TARGETS ${current_target} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) ---- + + == Подключение внешнего проекта В каталоге `cmex/thirdparty` нужно создать каталог `cmext` с проектом,