build functions and QskQmlExportTargets.cmake file

This commit is contained in:
Alexander Kavon 2023-12-29 01:11:43 -05:00
parent 48e3ecef04
commit 0670623fbd
6 changed files with 75 additions and 33 deletions

View File

@ -62,9 +62,18 @@ macro(qsk_setup_build)
endmacro()
macro(qsk_setup_install)
# package vars
set(PACKAGE_NAME ${PROJECT_NAME})
set(PACKAGE_VERSION ${CMAKE_PROJECT_VERSION})
set(PACKAGE_NAMESPACE ${PROJECT_NAME}::)
set(PACKAGE_LOCATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
# install paths for headers and libraries
string(TOLOWER "${PROJECT_NAME}" PACKAGE_DIR)
set(QSK_INSTALL_HEADERS "${CMAKE_INSTALL_INCLUDEDIR}/${PACKAGE_DIR}")
set(QSK_INSTALL_LIBS "${CMAKE_INSTALL_LIBDIR}/${PACKAGE_DIR}")
set(QSK_INSTALL_HEADERS ${CMAKE_INSTALL_INCLUDEDIR}/${PACKAGE_DIR})
set(QSK_INSTALL_LIBS ${CMAKE_INSTALL_LIBDIR}/${PACKAGE_DIR})
endmacro()
############################################################################
@ -97,6 +106,32 @@ qsk_setup_install()
add_subdirectory(src)
add_subdirectory(skins)
include(CMakePackageConfigHelpers)
# write QSkinnyConfigVersion.cmake file for cmake import
write_basic_package_version_file(
${CMAKE_BINARY_DIR}/_QSkinny/${PACKAGE_NAME}ConfigVersion.cmake
VERSION ${PACKAGE_VERSION}
COMPATIBILITY AnyNewerVersion)
# Copy QSkinnyConfig.cmake to build dir
configure_file(${QSK_CMAKE_DIR}/${PACKAGE_NAME}Config.cmake
${CMAKE_BINARY_DIR}/_QSkinny/${PACKAGE_NAME}Config.cmake
COPYONLY)
# install QSkinnyConfig.cmake and QSkinnyConfigVersion.cmake
# and QskTools.cmake file to lib/cmake/QSkinny directory
install(
FILES
${CMAKE_BINARY_DIR}/_QSkinny/${PACKAGE_NAME}Config.cmake
${CMAKE_BINARY_DIR}/_QSkinny/${PACKAGE_NAME}ConfigVersion.cmake
${QSK_CMAKE_DIR}/QskTools.cmake
DESTINATION
${PACKAGE_LOCATION}
COMPONENT
Devel)
# Build other libraries
if(BUILD_QML_EXPORT)
add_subdirectory(qmlexport)
endif()

View File

@ -1,2 +1 @@
include("${CMAKE_CURRENT_LIST_DIR}/QSkinnyTargets.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/QskTools.cmake")

View File

@ -99,3 +99,11 @@ function(qsk_add_example target)
target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_LIST_DIR})
endfunction()
function(qsk_update_package_config_file target)
file(APPEND
${CMAKE_BINARY_DIR}/_QSkinny/QSkinnyConfig.cmake
"include(\"\${CMAKE_CURRENT_LIST_DIR}/${target}.cmake\")\n")
endfunction()

View File

@ -10,7 +10,8 @@ set(target qskqmlexport)
qsk_add_library(${target} SHARED ${SOURCES} ${HEADERS})
target_link_libraries(${target} PRIVATE qskinny)
target_include_directories(${target} PUBLIC ${CMAKE_CURRENT_LIST_DIR})
target_include_directories(${target} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>)
set_target_properties(${target} PROPERTIES PUBLIC_HEADER QskQml.h)
if(BUILD_QSKDLL)
@ -20,8 +21,26 @@ if(BUILD_QSKDLL)
VERSION ${CMAKE_PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} )
endif()
set_target_properties(${target} PROPERTIES FOLDER libs)
# packaging
set(PACKAGE_NAME QskQmlExport)
set(QSKQE_INSTALL_HEADERS "${CMAKE_INSTALL_INCLUDEDIR}/${target}")
install(TARGETS ${target}
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${target}"
)
set_target_properties(${target} PROPERTIES FOLDER libs)
set_target_properties(${target} PROPERTIES EXPORT_NAME ${PACKAGE_NAME})
install(TARGETS ${target} EXPORT ${PACKAGE_NAME}Targets
INCLUDES DESTINATION ${QSKQE_INSTALL_HEADERS}
PUBLIC_HEADER DESTINATION ${QSKQE_INSTALL_HEADERS})
export(EXPORT ${PACKAGE_NAME}Targets
NAMESPACE ${PACKAGE_NAMESPACE})
install(EXPORT ${PACKAGE_NAME}Targets
FILE
${PACKAGE_NAME}Targets.cmake
NAMESPACE
${PACKAGE_NAMESPACE}
DESTINATION
${PACKAGE_LOCATION})
qsk_update_package_config_file(${PACKAGE_NAME}Targets)

View File

@ -516,17 +516,9 @@ set_target_properties(${target} PROPERTIES
VERSION ${CMAKE_PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} )
# packaging
set(PACKAGE_NAME ${PROJECT_NAME})
set(PACKAGE_VERSION ${CMAKE_PROJECT_VERSION})
set(PACKAGE_NAMESPACE ${PROJECT_NAME}::)
set(PACKAGE_LOCATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/cmake/${PACKAGE_NAME}ConfigVersion.cmake
VERSION ${PACKAGE_VERSION}
COMPATIBILITY AnyNewerVersion)
set(PACKAGE_NAME ${PROJECT_NAME})
# setup destination file paths for qskinny target
install(TARGETS ${target} EXPORT ${PACKAGE_NAME}Targets
LIBRARY DESTINATION ${QSK_INSTALL_LIBS}
ARCHIVE DESTINATION ${QSK_INSTALL_LIBS}
@ -534,13 +526,11 @@ install(TARGETS ${target} EXPORT ${PACKAGE_NAME}Targets
INCLUDES DESTINATION ${QSK_INSTALL_HEADERS}
PUBLIC_HEADER DESTINATION ${QSK_INSTALL_HEADERS})
# export QSkinnyTargets namespace
export(EXPORT ${PACKAGE_NAME}Targets
NAMESPACE ${PACKAGE_NAMESPACE})
configure_file(${QSK_CMAKE_DIR}/${PACKAGE_NAME}Config.cmake
${CMAKE_CURRENT_BINARY_DIR}/cmake/${PACKAGE_NAME}Config.cmake
COPYONLY)
# install QSkinnyTargets under QSkinny namespace
install(EXPORT ${PACKAGE_NAME}Targets
FILE
${PACKAGE_NAME}Targets.cmake
@ -548,13 +538,3 @@ install(EXPORT ${PACKAGE_NAME}Targets
${PACKAGE_NAMESPACE}
DESTINATION
${PACKAGE_LOCATION})
install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/cmake/${PACKAGE_NAME}Config.cmake
${CMAKE_CURRENT_BINARY_DIR}/cmake/${PACKAGE_NAME}ConfigVersion.cmake
${QSK_CMAKE_DIR}/QskTools.cmake
DESTINATION
${PACKAGE_LOCATION}
COMPONENT
Devel)

View File

@ -1,3 +1,4 @@
if(TARGET Qt::Svg)
add_subdirectory(svg2qvg)
endif()
qsk_update_package_config_file(QskTools)
endif()