From 0a54b6126a5945b783402d2fa093688b6f50d6ee Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Thu, 9 Dec 2021 16:29:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B8=D0=BC=D0=B5=D1=80=20=D0=B1?= =?UTF-8?q?=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 35 ++++++++++++++++++++ src/myx-cmake-example-library/CMakeLists.txt | 33 ++++++++++++++++++ src/myx-cmake-example-library/init.cpp | 13 ++++++++ src/myx-cmake-example-library/init.hpp | 10 ++++++ 4 files changed, 91 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 src/myx-cmake-example-library/CMakeLists.txt create mode 100644 src/myx-cmake-example-library/init.cpp create mode 100644 src/myx-cmake-example-library/init.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..40adabd --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,35 @@ +# Минимальная версия CMake +cmake_minimum_required(VERSION 3.3) + +# Предпочтительно следовать стандартам принятым в указанном диапазоне версий +cmake_policy(VERSION 3.0.2..3.7) + +# Название и версия проекта и используемые языки программирования +project(myx-cmake-example-library VERSION 0.2.0 LANGUAGES C CXX) + +### +# Обязательные переменные для MyxCMake +### +# Название организации +set(MYX_CMAKE_ORGANIZATION_NAME "Org." CACHE STRING "") + +# Имя автора +set(MYX_CMAKE_AUTHOR_NAME "John Doe" CACHE STRING "") + +# Почта автора +set(MYX_CMAKE_AUTHOR_EMAIL "mail@johndoe.com" CACHE STRING "") + +# Краткое описание проекта +set(MYX_CMAKE_DESCRIPTION "Пример проекта: библиотека" CACHE STRING "") + +find_package(MyxCMake REQUIRED) + +# Автоматически генерируемый заголовочный файл +myx_cmake_generate_private_config_header() + +# Автоматически генерируемый файл с информацией о репозитории +myx_cmake_generate_git_info_header() + +# Исходные тексты библиотеки +add_subdirectory(src/myx-cmake-example-library) + diff --git a/src/myx-cmake-example-library/CMakeLists.txt b/src/myx-cmake-example-library/CMakeLists.txt new file mode 100644 index 0000000..565219e --- /dev/null +++ b/src/myx-cmake-example-library/CMakeLists.txt @@ -0,0 +1,33 @@ +# Название основной цели и имя библиотеки в текущем каталоге +set(TRGT myx-cmake-example-library) + +# Список файлов исходных текстов +set(TRGT_cpp ${CMAKE_CURRENT_SOURCE_DIR}/init.cpp) + +# Список заголовочных файлов (используется для установки) +set(TRGT_hpp ${CMAKE_CURRENT_SOURCE_DIR}/init.hpp) + +# Функция для создания цели, результатом которой будет сборка библиотеки +# Обязательно использовать тип OBJECT +add_library(${TRGT} OBJECT ${TRGT_cpp} ${TRGT_hpp}) + +# Автоматическая установка значений свойств для цели +myx_cmake_common_target_properties(${TRGT}) + +# Создание разделяемой библиотеки +myx_cmake_add_shared_library(${TRGT}) + +# Создание статической библиотеки +myx_cmake_add_static_library(${TRGT}) + +# Цель, используемая только для установки заголовочных файлов без компиляции проекта +add_custom_target(${TRGT}-install-headers + COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=dev + -P "${CMAKE_BINARY_DIR}/cmake_install.cmake") + +# Установка заголовочных файлов +install(FILES ${TRGT_hpp} COMPONENT dev DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${TRGT}) + +# Установка файла для pkg-config +myx_cmake_generate_pkgconfig(${TRGT} COMPONENT dev INSTALL_LIBRARY true) + diff --git a/src/myx-cmake-example-library/init.cpp b/src/myx-cmake-example-library/init.cpp new file mode 100644 index 0000000..f461915 --- /dev/null +++ b/src/myx-cmake-example-library/init.cpp @@ -0,0 +1,13 @@ +#include "init.hpp" + +#include + +int32_t init( int32_t v = 0 ) +{ + int32_t s = 0; + for ( auto i = std::abs( v ); i > 0; i-- ) + { + s += i; + } + return( s ); +} diff --git a/src/myx-cmake-example-library/init.hpp b/src/myx-cmake-example-library/init.hpp new file mode 100644 index 0000000..684d894 --- /dev/null +++ b/src/myx-cmake-example-library/init.hpp @@ -0,0 +1,10 @@ +#ifndef MYX_CMAKE_EXAMPLE_LIBRARY_INIT_HPP_ +#define MYX_CMAKE_EXAMPLE_LIBRARY_INIT_HPP_ + +#pragma once + +#include + +int32_t init( int32_t v ); + +#endif // MYX_CMAKE_EXAMPLE_LIBRARY_INIT_HPP_