diff --git a/CMakeLists.txt b/CMakeLists.txt index f97dd97..2010c01 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,4 +17,21 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/find) include(CMLibCommon) +# 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) diff --git a/cmake/cmlib b/cmake/cmlib index c9c13df..c62609e 160000 --- a/cmake/cmlib +++ b/cmake/cmlib @@ -1 +1 @@ -Subproject commit c9c13df5527f59c4f9eff6229152205aa296605b +Subproject commit c62609e0dc48935b67cda434a75f4da50c4990d4 diff --git a/cmake/generators b/cmake/generators index 9952d86..b01bc7a 160000 --- a/cmake/generators +++ b/cmake/generators @@ -1 +1 @@ -Subproject commit 9952d8626933a1003f90395a90946934dd254f48 +Subproject commit b01bc7a52e091421be98f8bf670232402e17c3fe diff --git a/src/cmlib-example/CMakeLists.txt b/src/cmlib-example/CMakeLists.txt new file mode 100644 index 0000000..94ff1c4 --- /dev/null +++ b/src/cmlib-example/CMakeLists.txt @@ -0,0 +1,45 @@ +# Название основной цели и имя библиотеки в текущем каталоге +set(TRGT cmlib-example) + +# Список файлов исходных текстов +set(TRGT_sources + ${CMAKE_CURRENT_SOURCE_DIR}/init.cpp) + +# Список заголовочных файлов (используется для установки) +set(TRGT_headers + ${CMAKE_CURRENT_SOURCE_DIR}/init.hpp) + +# Функция для создания цели, результатом которой будет сборка библиотеки +add_common_library(TARGET ${TRGT} SOURCES ${TRGT_sources}) +common_target_properties(${TRGT}) + +# Добавление к пути поиска заголовочных файлов +target_include_directories(${TRGT} SYSTEM PUBLIC ${Boost_INCLUDE_DIRS}) + +# Цель, используемая только для установки +# заголовочных файлов без компиляции проекта +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 ${TRGT}_shared + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) +endif() + +# Установка заголовочных файлов +install( + FILES ${TRGT_headers} + COMPONENT headers + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${current_target}) + +# Установка файла для pkg-config +install(FILES ${CMAKE_BINARY_DIR}/${TRGT}.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) + diff --git a/src/cmlib-example/init.cpp b/src/cmlib-example/init.cpp new file mode 100644 index 0000000..7097f84 --- /dev/null +++ b/src/cmlib-example/init.cpp @@ -0,0 +1,14 @@ +#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; +} + diff --git a/src/cmlib-example/init.hpp b/src/cmlib-example/init.hpp new file mode 100644 index 0000000..041e8fd --- /dev/null +++ b/src/cmlib-example/init.hpp @@ -0,0 +1,9 @@ +#ifndef CMLIB_EXAMPLE_HPP_ +#define CMLIB_EXAMPLE_HPP_ + +#include + +int32_t cmlib_example_init(int32_t i); + +#endif // CMLIB_EXAMPLE_HPP_ +