include_guard(GLOBAL) include(GenerateExportHeader) function(myx_add_library NAME) set(options) set(oneValueArgs TYPE) set(multiValueArgs SOURCES) cmake_parse_arguments(arg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if(NOT arg_TYPE) set(arg_TYPE "OBJECT") endif() add_library(${NAME} ${arg_TYPE}) if(arg_TYPE STREQUAL INTERFACE) target_include_directories(${NAME} INTERFACE $ $ ) else() string(TOUPPER ${NAME} PROJECT_NAME_UPPER) # Опция для разрешения сборки разделяемой библиотеки option(${PROJECT_NAME_UPPER}_BUILD_SHARED "Build shared library" ON) # Опция для разрешения сборки статической библиотеки option(${PROJECT_NAME_UPPER}_BUILD_STATIC "Build static library" ON) target_include_directories(${NAME} PUBLIC $ PRIVATE $ ) set_target_properties(${NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) string(TOUPPER ${NAME} suffix) generate_export_header(${NAME} BASE_NAME "${suffix}" EXPORT_MACRO_NAME "EXPORT_${suffix}" DEPRECATED_MACRO_NAME "DEPRECATED_${suffix}" NO_DEPRECATED_MACRO_NAME "NO_DEPRECATED_${suffix}" NO_EXPORT_MACRO_NAME "NO_EXPORT_${suffix}" STATIC_DEFINE "STATIC_DEFINE_${suffix}" EXPORT_FILE_NAME "${PROJECT_SOURCE_DIR}/include/${NAME}/export_autogen.hpp" DEFINE_NO_DEPRECATED ) # Цель для создания разделяемой библиотеки из объектных файлов if(${PROJECT_NAME_UPPER}_BUILD_SHARED) # Для создания разделяемой библиотеки используются объектные файлы цели ${NAME} add_library(${NAME}_shared SHARED $) # Установка дополнительных свойств для цели ${NAME}_shared # OUTPUT_NAME: базовое имя выходного файла (без учёта расширения) # VERSION: версия библиотеки # SOVERSION: мажорная версия библиотеки set_target_properties(${NAME}_shared PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR} OUTPUT_NAME ${NAME}) endif() # Цель для создания статической библиотеки из объектных файлов if(${PROJECT_NAME_UPPER}_BUILD_STATIC) # Для создания статической библиотеки используются объектные файлы цели ${NAME} add_library(${NAME}_static STATIC $) # Установка дополнительных свойств для цели ${NAME}_static # OUTPUT_NAME: базовое имя выходного файла (без учёта расширения) set_target_properties(${NAME}_static PROPERTIES OUTPUT_NAME ${NAME}) endif() endif() endfunction()