Loading src/CMakeLists.txt +79 −58 Original line number Diff line number Diff line include(GenerateExportHeader) cmake_minimum_required(VERSION 3.21) project(libuuidp VERSION 1.0.0 LANGUAGES CXX) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) include(GenerateExportHeader) include(CMakePackageConfigHelpers) # ----------- Library ----------- add_library(uuidp SHARED uuidp.cpp) # Export all symbols on MSVC if you don’t annotate every function set_target_properties(uuidp PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON OUTPUT_NAME "uuidp" VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR} ) # Export header (defines UUIDP_EXPORT macro) generate_export_header(uuidp EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/uuidp_export.h" ) generate_export_header(uuidp) # Public headers for consumers (build + install) target_include_directories(uuidp PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> $<INSTALL_INTERFACE:include> ) # Optional: Debug postfix on MSVC set_target_properties(uuidp PROPERTIES DEBUG_POSTFIX "d") # ----------- Tool ----------- add_executable(uuid-gen uuid-gen.cpp) target_link_libraries(uuid-gen PRIVATE uuidp) target_link_libraries(uuid-gen uuidp) # ----------- Install (runtime/import lib/headers) ----------- include(GNUInstallDirs) install( TARGETS uuidp # Install the DLL/EXE to bin, the import lib (.lib) to lib install(TARGETS uuidp EXPORT uuidpTargets LIBRARY DESTINATION lib RUNTIME DESTINATION bin RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # .dll (Windows) LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # .so/.dylib (posix) ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # .lib (import/static) INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) include(CMakePackageConfigHelpers) set_property(TARGET uuidp APPEND PROPERTY INCLUDE_DIRECTORIES "${CMAKE_INSTALL_INCLUDEDIR}") write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/libuuidpConfigVersion.cmake" VERSION ${Upstream_VERSION} COMPATIBILITY AnyNewerVersion install(TARGETS uuid-gen RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt" "${CMAKE_CURRENT_BINARY_DIR}/uuidp_config.cmake" @ONLY) # Headers (yours + generated export header) install(FILES uuidp.h "${CMAKE_CURRENT_BINARY_DIR}/uuidp_config.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/uuidp.h" "${CMAKE_CURRENT_BINARY_DIR}/uuidp_export.h" DESTINATION include COMPONENT Devel DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) # ----------- CMake package (find_package support) ----------- # Where to place the package config set(ConfigPackageLocation "${CMAKE_INSTALL_LIBDIR}/cmake/libuuidp") # Export the targets file install(EXPORT uuidpTargets FILE libuuidpTargets.cmake NAMESPACE uuidp:: DESTINATION "${ConfigPackageLocation}" ) # Config + version files configure_package_config_file( "${CMAKE_SOURCE_DIR}/uuid.cmake.in" "${CMAKE_CURRENT_SOURCE_DIR}/uuid.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/libuuidpConfig.cmake" INSTALL_DESTINATION ${ConfigPackageLocation} @ONLY INSTALL_DESTINATION "${ConfigPackageLocation}" NO_CHECK_REQUIRED_COMPONENTS_MACRO ) install(EXPORT uuidpTargets FILE libuuidpTargets.cmake NAMESPACE uuidp:: DESTINATION "lib/cmake/libuuidp" write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/libuuidpConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY AnyNewerVersion ) install( FILES install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libuuidpConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/libuuidpConfigVersion.cmake" DESTINATION "lib/cmake/libuuidp" COMPONENT Devel DESTINATION "${ConfigPackageLocation}" ) install(TARGETS uuid-gen RUNTIME_DEPENDENCY_SET DESTINATION bin) if(${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows") set(CPACK_GENERATOR WIX) set(CPACK_WIX_UPGRADE_GUID "fdedd700-d2a1-5dbe-8157-640d83d42577") # ----------- CPack (WiX) ----------- if(WIN32) set(CPACK_GENERATOR "WIX") set(CPACK_PACKAGE_NAME "uuidp") set(CPACK_PACKAGE_VENDOR "tuxist.de") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.txt") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "uuidp - A C++ uuid Library") set(CPACK_PACKAGE_VERSION "1.0.0") set(CPACK_PACKAGE_VERSION_MAJOR "1") set(CPACK_PACKAGE_VERSION_MINOR "0") set(CPACK_PACKAGE_VERSION_PATCH "0") set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) set(CPACK_PACKAGE_INSTALL_DIRECTORY "libuuidp") INCLUDE(CPack) # WiX expects an .rtf license typically; provide an RTF if possible set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.rtf") # Stable, product-wide GUID (do not change between versions) set(CPACK_WIX_UPGRADE_GUID "fdedd700-d2a1-5dbe-8157-640d83d42577") include(CPack) endif() Loading
src/CMakeLists.txt +79 −58 Original line number Diff line number Diff line include(GenerateExportHeader) cmake_minimum_required(VERSION 3.21) project(libuuidp VERSION 1.0.0 LANGUAGES CXX) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) include(GenerateExportHeader) include(CMakePackageConfigHelpers) # ----------- Library ----------- add_library(uuidp SHARED uuidp.cpp) # Export all symbols on MSVC if you don’t annotate every function set_target_properties(uuidp PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON OUTPUT_NAME "uuidp" VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR} ) # Export header (defines UUIDP_EXPORT macro) generate_export_header(uuidp EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/uuidp_export.h" ) generate_export_header(uuidp) # Public headers for consumers (build + install) target_include_directories(uuidp PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> $<INSTALL_INTERFACE:include> ) # Optional: Debug postfix on MSVC set_target_properties(uuidp PROPERTIES DEBUG_POSTFIX "d") # ----------- Tool ----------- add_executable(uuid-gen uuid-gen.cpp) target_link_libraries(uuid-gen PRIVATE uuidp) target_link_libraries(uuid-gen uuidp) # ----------- Install (runtime/import lib/headers) ----------- include(GNUInstallDirs) install( TARGETS uuidp # Install the DLL/EXE to bin, the import lib (.lib) to lib install(TARGETS uuidp EXPORT uuidpTargets LIBRARY DESTINATION lib RUNTIME DESTINATION bin RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # .dll (Windows) LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # .so/.dylib (posix) ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # .lib (import/static) INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) include(CMakePackageConfigHelpers) set_property(TARGET uuidp APPEND PROPERTY INCLUDE_DIRECTORIES "${CMAKE_INSTALL_INCLUDEDIR}") write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/libuuidpConfigVersion.cmake" VERSION ${Upstream_VERSION} COMPATIBILITY AnyNewerVersion install(TARGETS uuid-gen RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt" "${CMAKE_CURRENT_BINARY_DIR}/uuidp_config.cmake" @ONLY) # Headers (yours + generated export header) install(FILES uuidp.h "${CMAKE_CURRENT_BINARY_DIR}/uuidp_config.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/uuidp.h" "${CMAKE_CURRENT_BINARY_DIR}/uuidp_export.h" DESTINATION include COMPONENT Devel DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) # ----------- CMake package (find_package support) ----------- # Where to place the package config set(ConfigPackageLocation "${CMAKE_INSTALL_LIBDIR}/cmake/libuuidp") # Export the targets file install(EXPORT uuidpTargets FILE libuuidpTargets.cmake NAMESPACE uuidp:: DESTINATION "${ConfigPackageLocation}" ) # Config + version files configure_package_config_file( "${CMAKE_SOURCE_DIR}/uuid.cmake.in" "${CMAKE_CURRENT_SOURCE_DIR}/uuid.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/libuuidpConfig.cmake" INSTALL_DESTINATION ${ConfigPackageLocation} @ONLY INSTALL_DESTINATION "${ConfigPackageLocation}" NO_CHECK_REQUIRED_COMPONENTS_MACRO ) install(EXPORT uuidpTargets FILE libuuidpTargets.cmake NAMESPACE uuidp:: DESTINATION "lib/cmake/libuuidp" write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/libuuidpConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY AnyNewerVersion ) install( FILES install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libuuidpConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/libuuidpConfigVersion.cmake" DESTINATION "lib/cmake/libuuidp" COMPONENT Devel DESTINATION "${ConfigPackageLocation}" ) install(TARGETS uuid-gen RUNTIME_DEPENDENCY_SET DESTINATION bin) if(${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows") set(CPACK_GENERATOR WIX) set(CPACK_WIX_UPGRADE_GUID "fdedd700-d2a1-5dbe-8157-640d83d42577") # ----------- CPack (WiX) ----------- if(WIN32) set(CPACK_GENERATOR "WIX") set(CPACK_PACKAGE_NAME "uuidp") set(CPACK_PACKAGE_VENDOR "tuxist.de") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.txt") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "uuidp - A C++ uuid Library") set(CPACK_PACKAGE_VERSION "1.0.0") set(CPACK_PACKAGE_VERSION_MAJOR "1") set(CPACK_PACKAGE_VERSION_MINOR "0") set(CPACK_PACKAGE_VERSION_PATCH "0") set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) set(CPACK_PACKAGE_INSTALL_DIRECTORY "libuuidp") INCLUDE(CPack) # WiX expects an .rtf license typically; provide an RTF if possible set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.rtf") # Stable, product-wide GUID (do not change between versions) set(CPACK_WIX_UPGRADE_GUID "fdedd700-d2a1-5dbe-8157-640d83d42577") include(CPack) endif()