Use PUBLIC_HEADER CMake target property to install API headers

This commit is contained in:
Kai Blaschke
2025-12-05 09:08:03 +01:00
parent ccd606df60
commit 8e228952ac
2 changed files with 36 additions and 47 deletions

View File

@ -1,8 +1,19 @@
add_library(projectM_api INTERFACE)
target_sources(projectM_api
PRIVATE
configure_file(version.h.in "${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/version.h" @ONLY)
include(GenerateExportHeader)
set(PROJECTM_EXPORT_HEADER "${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/projectM_export.h")
generate_export_header(projectM_api
BASE_NAME projectM
EXPORT_FILE_NAME "${PROJECTM_EXPORT_HEADER}"
)
set(PROJECTM_PUBLIC_HEADERS
"${PROJECTM_EXPORT_HEADER}"
"${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/version.h"
include/projectM-4/audio.h
include/projectM-4/callbacks.h
include/projectM-4/core.h
@ -15,9 +26,15 @@ target_sources(projectM_api
include/projectM-4/user_sprites.h
)
target_sources(projectM_api
PRIVATE
${PROJECTM_PUBLIC_HEADERS}
)
set_target_properties(projectM_api PROPERTIES
EXPORT_NAME API
FOLDER libprojectM
PUBLIC_HEADER "${PROJECTM_PUBLIC_HEADERS}"
)
target_include_directories(projectM_api
@ -27,17 +44,6 @@ target_include_directories(projectM_api
"$<INSTALL_INTERFACE:${PROJECTM_INCLUDE_DIR}>"
)
configure_file(version.h.in "${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/version.h" @ONLY)
include(GenerateExportHeader)
set(PROJECTM_EXPORT_HEADER "${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/projectM_export.h")
generate_export_header(projectM_api
BASE_NAME projectM
EXPORT_FILE_NAME "${PROJECTM_EXPORT_HEADER}"
)
add_library(libprojectM::API ALIAS projectM_api)
@ -51,16 +57,4 @@ if(ENABLE_INSTALL)
PUBLIC_HEADER DESTINATION "${PROJECTM_INCLUDE_DIR}/projectM-4" COMPONENT Devel
)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/projectM_export.h"
"${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/version.h"
DESTINATION "${PROJECTM_INCLUDE_DIR}/projectM-4"
COMPONENT Devel
)
install(DIRECTORY include/projectM-4
DESTINATION "${PROJECTM_INCLUDE_DIR}"
COMPONENT Devel
)
endif()

View File

@ -2,15 +2,10 @@ if(NOT ENABLE_PLAYLIST)
return()
endif()
add_library(projectM_playlist_main OBJECT
Filter.cpp
Filter.hpp
Item.cpp
Item.hpp
Playlist.cpp
Playlist.hpp
PlaylistCWrapper.cpp
PlaylistCWrapper.hpp
set(PROJECTM_PLAYLIST_EXPORT_HEADER "${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/projectM_playlist_export.h")
set(PROJECTM_PLAYLIST_PUBLIC_HEADERS
"${PROJECTM_PLAYLIST_EXPORT_HEADER}"
api/projectM-4/playlist.h
api/projectM-4/playlist_callbacks.h
api/projectM-4/playlist_core.h
@ -21,6 +16,18 @@ add_library(projectM_playlist_main OBJECT
api/projectM-4/playlist_types.h
)
add_library(projectM_playlist_main OBJECT
${PROJECTM_PLAYLIST_PUBLIC_HEADERS}
Filter.cpp
Filter.hpp
Item.cpp
Item.hpp
Playlist.cpp
Playlist.hpp
PlaylistCWrapper.cpp
PlaylistCWrapper.hpp
)
target_include_directories(projectM_playlist_main
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
@ -45,6 +52,7 @@ set_target_properties(projectM_playlist PROPERTIES
EXPORT_NAME playlist
FOLDER libprojectM
OUTPUT_NAME ${PROJECTM_LIBRARY_BASE_OUTPUT_NAME}-playlist
PUBLIC_HEADER "${PROJECTM_PLAYLIST_PUBLIC_HEADERS}"
)
target_include_directories(projectM_playlist
@ -88,8 +96,6 @@ endif()
include(GenerateExportHeader)
set(PROJECTM_PLAYLIST_EXPORT_HEADER "${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/projectM_playlist_export.h")
generate_export_header(projectM_playlist
BASE_NAME projectM_playlist
EXPORT_FILE_NAME "${PROJECTM_PLAYLIST_EXPORT_HEADER}"
@ -107,17 +113,6 @@ if(ENABLE_INSTALL)
PUBLIC_HEADER DESTINATION "${PROJECTM_INCLUDE_DIR}/projectM-4" COMPONENT Devel
)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/projectM_playlist_export.h"
DESTINATION "${PROJECTM_INCLUDE_DIR}/projectM-4"
COMPONENT Devel
)
install(DIRECTORY api/projectM-4
DESTINATION "${PROJECTM_INCLUDE_DIR}"
COMPONENT Devel
)
# For use from an installed package (system install, vcpkg, homebrew etc.)
include(CMakePackageConfigHelpers)