This commit is contained in:
Andrei Astafev 2020-04-10 18:10:40 +03:00
parent 2abd41f429
commit ec16a3a380
3 changed files with 138 additions and 60 deletions

@ -1 +1 @@
Subproject commit 288c5aeba001bc605d20c573c37d1fb9384262e8 Subproject commit b271b3ed553a3e00f9fa079384e94a27c68ff550

@ -1 +1 @@
Subproject commit ce6b18660a933855dbe996fc5b5d3d0ac1c25223 Subproject commit c651ba0ef064734b6457684c780f8c863f0956bf

View File

@ -96,7 +96,9 @@
выпуск, появляется необходимость корректного полного удаления выпуск, появляется необходимость корректного полного удаления
результатов предыдущего тип сборки. результатов предыдущего тип сборки.
== Начало проекта
[[base-project]]
== Базовый проект
Проект, в котором выполнены приведённые в данном разделе действия, Проект, в котором выполнены приведённые в данном разделе действия,
можно посмотреть https://git.246060.ru/f1x1t/cmlib-example-base[здесь] можно посмотреть https://git.246060.ru/f1x1t/cmlib-example-base[здесь]
@ -124,11 +126,11 @@ git init
[source,sh] [source,sh]
---- ----
git submodule add https://git.246060.ru:f1x1t/cmlib.git cmake/cmlib 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-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-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/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/uncrustify-config.git cmake/etc/uncrustify
git commit -a -m "Начало проекта" git commit -a -m "Начало проекта"
---- ----
@ -375,83 +377,157 @@ cpack
== Примеры библиотек и приложений == Примеры библиотек и приложений
Напишу позже.
=== Базовая библиотека
Проект с базовой библиотекой реализован на основе <<base-project,базового проекта>>.
Исходные тексты содержат комментарии, объясняющие назначение используемых функций.
Проект можно посмотреть https://git.246060.ru/f1x1t/cmlib-example-library[здесь]
или сделать его копию командой:
[source,sh]
----
git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-library
----
В файл `CMakeLists.txt`, находящийся в корневом каталоге проекта, нужно добавить:
== Базовая библиотека
В файле `cmex/CMakeLists.txt` должна быть строка, включающая поиск файла
`CMakeLists.txt` в подкаталоге `src/lib`:
[source,cmake] [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] В подкаталоге `src/cmlib-example` нужно создать файл `CMakeLists.txt`:
----
#ifndef LIBCMEX_CMEX_HPP_
#define LIBCMEX_CMEX_HPP_
#include <stdint.h>
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`:
[source,cmake] [source,cmake]
---- ----
# Название основной цели и имя библиотеки в текущем каталоге # Название основной цели и имя библиотеки в текущем каталоге
set(current_target cmex) set(TRGT cmlib-example)
# Список файлов исходных текстов # Список файлов исходных текстов
set(current_target_sources set(TRGT_sources
${CMAKE_CURRENT_SOURCE_DIR}/cmex.cpp ${CMAKE_CURRENT_SOURCE_DIR}/init.cpp)
)
# Список заголовочных файлов (используется для установки) # Список заголовочных файлов (используется для установки)
set(current_target_headers set(TRGT_headers
${CMAKE_CURRENT_SOURCE_DIR}/cmex.hpp ${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 target_include_directories(${TRGT} SYSTEM PUBLIC ${Boost_INCLUDE_DIRS})
COMMAND "${CMAKE_COMMAND}"
-DCMAKE_INSTALL_COMPONENT=headers -P "${CMAKE_BINARY_DIR}/cmake_install.cmake"
)
# Правила для установки # Цель, используемая только для установки
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) if(BUILD_SHARED_LIBS)
install(TARGETS ${current_target}_shared LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(TARGETS ${TRGT}_shared
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif() 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 <stdint.h>
int32_t cmlib_example_init(int32_t i);
#endif // CMLIB_EXAMPLE_HPP_
----
и файл `init.cpp`:
[source,cpp]
----
#include "init.hpp"
#include <boost/range/counting_range.hpp>
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;
}
----
ПИШУ ЗДЕСЬ!!!
=== Базовое приложение
Проект с базовым приложением реализован на основе <<base-project,базового проекта>>.
Исходные тексты содержат комментарии, объясняющие назначение используемых функций.
Проект можно посмотреть 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` должна быть строка, включающая поиск файла В файле `cmex/CMakeLists.txt` должна быть строка, включающая поиск файла
`CMakeLists.txt` в подкаталоге `src/cmex`: `CMakeLists.txt` в подкаталоге `src/cmex`:
@ -521,6 +597,8 @@ target_link_libraries(${current_target} cmex_static)
install(TARGETS ${current_target} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install(TARGETS ${current_target} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
---- ----
== Подключение внешнего проекта == Подключение внешнего проекта
В каталоге `cmex/thirdparty` нужно создать каталог `cmext` с проектом, В каталоге `cmex/thirdparty` нужно создать каталог `cmext` с проектом,