Пример библиотеки
This commit is contained in:
parent
ce708a4f1d
commit
0a54b6126a
35
CMakeLists.txt
Normal file
35
CMakeLists.txt
Normal file
@ -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)
|
||||||
|
|
33
src/myx-cmake-example-library/CMakeLists.txt
Normal file
33
src/myx-cmake-example-library/CMakeLists.txt
Normal file
@ -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)
|
||||||
|
|
13
src/myx-cmake-example-library/init.cpp
Normal file
13
src/myx-cmake-example-library/init.cpp
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#include "init.hpp"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
int32_t init( int32_t v = 0 )
|
||||||
|
{
|
||||||
|
int32_t s = 0;
|
||||||
|
for ( auto i = std::abs( v ); i > 0; i-- )
|
||||||
|
{
|
||||||
|
s += i;
|
||||||
|
}
|
||||||
|
return( s );
|
||||||
|
}
|
10
src/myx-cmake-example-library/init.hpp
Normal file
10
src/myx-cmake-example-library/init.hpp
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#ifndef MYX_CMAKE_EXAMPLE_LIBRARY_INIT_HPP_
|
||||||
|
#define MYX_CMAKE_EXAMPLE_LIBRARY_INIT_HPP_
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
int32_t init( int32_t v );
|
||||||
|
|
||||||
|
#endif // MYX_CMAKE_EXAMPLE_LIBRARY_INIT_HPP_
|
Loading…
Reference in New Issue
Block a user