Newer
Older
cmake_minimum_required(VERSION 3.16)
project(bimap CXX)
set(PROJECT_VERSION 0.0.1)
#TODO: does this project require C++ 20? Then that should be part of the compile features of the targets
set(CMAKE_CXX_STANDARD 20)
include(GNUInstallDirs)
# Define target
add_library(bimap INTERFACE)
add_library(ojl::bimap ALIAS bimap)
target_include_directories(bimap
INTERFACE
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_sources(bimap
INTERFACE FILE_SET HEADERS
BASE_DIRS ${PROJECT_SOURCE_DIR}/include/ojl
FILES ${PROJECT_SOURCE_DIR}/include/ojl/bimap.hpp
)
#target_include_directories(bimap INTERFACE include)
#REMEMBER, usually we would do target_include_directories(bimap PUBLIC $<BUILD_INTERFACE:${bimap_SOURCE_DIR}/include> $<BUILD_INTERFACE:${bimap_BINARY_DIR}/include> $<INSTALL_INTERFACE:include>)
#But we just need the one in this case, since include is in the cmake root dir
add_subdirectory(samples)
option(DOWNLOAD_DEPS "Download unsatisfied dependencies using FetchContent" ON)
option(BUILD_TESTS "Build tests" ON)
if (BUILD_TESTS)
if (DOWNLOAD_DEPS)
include(cmake/fetch_catch2.cmake)
endif()
enable_testing()
add_subdirectory(test)
endif()
# Define export set bimapTargets, install headers (but this doesn't actually install them...)
install(TARGETS bimap
EXPORT bimapTargets
FILE_SET HEADERS DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ojl
)
# Install the headers at the install location
# Export the targets (?) what I don't get is how the bimapTargets.cmake differs from bimapConfig.cmake, why do we need both?
# This still only installs a target named "bimap", not ojl::bimap ??? Even though it says NAMESPACE ojl here
install(EXPORT bimapTargets
FILE bimapTargets.cmake
NAMESPACE ojl::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/bimap
)
#TODO: generate a file that checks the version number using CMakePackageConfigHelpers (write_basic_package_version_file)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"bimapConfigVersion.cmake"
VERSION ${bimap_VERSION}
COMPATIBILITY SameMajorVersion
)
install(FILES "bimapConfig.cmake" "${CMAKE_BINARY_DIR}/bimapConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/bimap
)
### SEPARATE FILE TO BE INSTALLED ? ###
# find dependencies if needed
# include("${CMAKE_CURRENT_LIST_DIR}/bimapTargets.cmake}")