diff --git a/CMakeLists.txt b/CMakeLists.txt index ad7e13d..94298d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,13 +1,14 @@ cmake_minimum_required(VERSION 3.26) +project(omath VERSION 1.0.0) + -project(omath) set(CMAKE_CXX_STANDARD 26) option(OMATH_BUILD_TESTS "Build unit tests" ON) -option(OMATH_THREAT_WARNING_AS_ERROR "Set highest level of warnings and force compiler to threat them as errors" ON) -option(OMATH_BUILD_AS_SHARED_LIBRARY "Build Omath as .so\\.dll." OFF) +option(OMATH_THREAT_WARNING_AS_ERROR "Set highest level of warnings and force compiler to treat them as errors" ON) +option(OMATH_BUILD_AS_SHARED_LIBRARY "Build Omath as .so or .dll" OFF) if (OMATH_BUILD_AS_SHARED_LIBRARY) add_library(omath SHARED source/Vector3.cpp) @@ -20,7 +21,7 @@ add_subdirectory(extlibs) if(OMATH_BUILD_TESTS) add_subdirectory(tests) -endif () +endif() if (WIN32 AND OMATH_THREAT_WARNING_AS_ERROR) target_compile_options(omath PRIVATE /W4 /WX) @@ -28,4 +29,51 @@ elseif(UNIX AND OMATH_THREAT_WARNING_AS_ERROR) target_compile_options(omath PRIVATE -Wall -Wextra -Wpedantic) endif() -target_include_directories(omath PUBLIC include) \ No newline at end of file +target_include_directories(omath + PUBLIC + $ # Use this path when building the project + $ # Use this path when the project is installed +) + + +# Installation rules + +# Install the library +install(TARGETS omath + EXPORT omathTargets + ARCHIVE DESTINATION lib COMPONENT omath_component # For static libraries + LIBRARY DESTINATION lib COMPONENT omath_component # For shared libraries + RUNTIME DESTINATION bin COMPONENT omath_component # For executables (on Windows) +) + +# Install headers as part of omath_component +install(DIRECTORY include/ DESTINATION include COMPONENT omath_component) + +# Export omath target for CMake find_package support, also under omath_component +install(EXPORT omathTargets + FILE omathTargets.cmake + NAMESPACE omath:: + DESTINATION lib/cmake/omath COMPONENT omath_component +) + + +# Generate the omathConfigVersion.cmake file +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/omathConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion +) + +# Generate the omathConfig.cmake file from the template (which is in the cmake/ folder) +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/omathConfig.cmake.in" # Path to the .in file + "${CMAKE_CURRENT_BINARY_DIR}/omathConfig.cmake" # Output path for the generated file + INSTALL_DESTINATION lib/cmake/omath +) + +# Install the generated config files +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/omathConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/omathConfigVersion.cmake" + DESTINATION lib/cmake/omath +) \ No newline at end of file diff --git a/cmake/omathConfig.cmake.in b/cmake/omathConfig.cmake.in new file mode 100644 index 0000000..a889c4d --- /dev/null +++ b/cmake/omathConfig.cmake.in @@ -0,0 +1,6 @@ +@PACKAGE_INIT@ + +include(CMakeFindDependencyMacro) + +# Load the targets for the omath library +include("${CMAKE_CURRENT_LIST_DIR}/omathTargets.cmake")