Files
iKvxx/CMakeLists.txt

70 lines
2.4 KiB
CMake
Raw Normal View History

cmake_minimum_required(VERSION 3.16)
project(ikvxx VERSION 0.1.0 LANGUAGES C CXX)
option(IKVXX_BUILD_TESTS "Build iKvxx unit tests" ON)
option(IKVXX_INSTALL "Install iKvxx" ON)
if(IKVXX_BUILD_TESTS)
include(CTest)
endif()
set(IKV_BUILD_DEMOS OFF CACHE BOOL "" FORCE)
set(IKV_BUILD_TESTS ${IKVXX_BUILD_TESTS} CACHE BOOL "" FORCE)
set(IKV_INSTALL OFF CACHE BOOL "" FORCE)
add_subdirectory(third_party/iKv)
set_target_properties(ikv PROPERTIES
PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/third_party/iKv/include/ikv.h")
add_library(ikvxx src/value.cpp)
add_library(ikvxx::ikvxx ALIAS ikvxx)
target_compile_features(ikvxx PUBLIC cxx_std_17)
target_include_directories(ikvxx PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
target_link_libraries(ikvxx PUBLIC ikv::ikv)
if(MSVC)
target_compile_options(ikvxx PRIVATE /W4 /permissive-)
else()
target_compile_options(ikvxx PRIVATE -Wall -Wextra -Wpedantic)
endif()
if(IKVXX_BUILD_TESTS)
add_executable(ikvxx_tests tests/value_tests.cpp)
target_link_libraries(ikvxx_tests PRIVATE ikvxx::ikvxx)
target_compile_features(ikvxx_tests PRIVATE cxx_std_17)
set(IKVXX_TEST_CASES
construction_and_type_inspection
assignments_and_conversions
objects_members_and_lookup_overloads
arrays_and_index_overloads
text_parsing_and_files
binary_memory_and_files
refresh_and_ownership)
foreach(IKVXX_TEST_CASE IN LISTS IKVXX_TEST_CASES)
add_test(
NAME "ikvxx.${IKVXX_TEST_CASE}"
COMMAND ikvxx_tests --case "${IKVXX_TEST_CASE}")
endforeach()
endif()
if(IKVXX_INSTALL)
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
install(TARGETS ikv ikvxx EXPORT ikvxxTargets)
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(EXPORT ikvxxTargets NAMESPACE ikvxx:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ikvxx)
configure_package_config_file(cmake/ikvxxConfig.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/ikvxxConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ikvxx)
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/ikvxxConfigVersion.cmake"
VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/ikvxxConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/ikvxxConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ikvxx)
endif()