This commit is contained in:
2022-10-07 00:03:48 +03:00
parent 15b168d689
commit f6107e5bff
7 changed files with 41 additions and 10 deletions

View File

@ -1,4 +1,4 @@
set(MYX_CMAKE_PACKAGE_VERSION "2.0.2")
set(MYX_CMAKE_PACKAGE_VERSION "2.0.3")
if(MYX_CMAKE_PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
set(PACKAGE_VERSION_COMPATIBLE FALSE)
else()

View File

@ -73,11 +73,42 @@ function(myx_target_setup NAME)
target_sources(${NAME} PUBLIC $<BUILD_INTERFACE:${ARG_INTERFACE_HEADERS}>)
target_sources(${NAME} PUBLIC ${ARG_PUBLIC_HEADERS})
target_sources(${NAME} PRIVATE ${ARG_CPP} ${ARG_PCH} ${ARG_PRIVATE_HEADERS})
if(NOT target_type STREQUAL "OBJECT_LIBRARY")
target_link_libraries(${NAME} PRIVATE ${ARG_LINK_LIBRARIES})
endif()
target_compile_definitions(${NAME} PRIVATE ${ARG_COMPILE_DEFINITIONS})
# CMake до версии 3.12 не умеет извлекать из целей типа `OBJECT_LIBRARY`
# информацию о заголовочных файлах. Это обход.
if(${CMAKE_VERSION} VERSION_GREATER "3.11.99")
target_link_libraries(${NAME} PRIVATE ${ARG_LINK_LIBRARIES})
else()
if((NOT ${target_type} STREQUAL "OBJECT_LIBRARY") AND
(NOT ${target_type} STREQUAL "EXECUTABLE"))
target_link_libraries(${NAME} PRIVATE ${ARG_LINK_LIBRARIES})
else()
foreach(link_library ${ARG_LINK_LIBRARIES})
if(TARGET ${link_library})
get_target_property(lib_type ${link_library} TYPE)
if(lib_type)
get_target_property(include_dir ${link_library} INTERFACE_INCLUDE_DIRECTORIES)
if(include_dir)
target_include_directories(${NAME} PUBLIC ${include_dir})
endif()
if(${target_type} STREQUAL "EXECUTABLE")
if(${lib_type} STREQUAL "OBJECT_LIBRARY")
if(TARGET ${link_library}_static)
target_link_libraries(${NAME} PRIVATE ${link_library}_static)
else()
target_link_libraries(${NAME} PRIVATE ${link_library}_shared)
endif()
else()
target_link_libraries(${NAME} PRIVATE ${link_library})
endif()
endif()
endif()
endif()
endforeach()
endif()
endif()
# Установка публичных заголовочных файлов
if(PROJECT_IS_TOP_LEVEL)
install_relative(${PROJECT_SOURCE_DIR}