GSL/CMakeLists.txt

62 lines
1.7 KiB
CMake
Raw Normal View History

cmake_minimum_required(VERSION 3.1.3...3.16)
2015-08-20 21:09:14 -04:00
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
include(guidelineSupportLibrary)
project(GSL
VERSION 4.0.0
LANGUAGES CXX
)
# Must include after the project call due to GNUInstallDirs requiring a language be enabled (IE. CXX)
include(GNUInstallDirs)
# Creates a library GSL which is an interface (header files only)
Update CMake usage (#493) * Refactor cmake file to have GSL as an interface CMake supports header only libraries as INTERFACE libraries. Using interfaces libraries make is easier for users to use the library because one just need to "link" agaisnt the library and necessary include paths, definitions, flags... will be taken care of. This commit creates a new interface library called GSL. It then add the following things to the GSL library: - compiler flags ex: (-std=c++14) - definitions ex: _SCL_SECURE_NO_WARNINGS - include paths ex: include/gsl - natvis file Another project can now have the GSL project as a git submodule and one only need to add the two following lines to their project to use the GSL. add_subdirectory(GSL) target_link_libraries(<some target> GSL) After cmake 3.8.0 a lot of the logic can be simplified. Right now the cmake file has an if for version checking, but when the minimun required version is 3.8.0 one can just delete the branching and keep the simpler version. * Cut support for c++11 Compiling on GCC6.2 with only the c++11 flag will generate compilation errors. For example some of the errors are related to the use of enable_if_t which is a c++14 feature. To avoid compilation errors this comiit removes c++11 support on linux. * Refactor code that pulls unittest-cpp Two minor changes: - uses cmake to find a proper installation of git (in case user does not have it on the path) - checks for the CMakeLists file instead. This is needed for the build itself and seems like a better way to do the checking * Refactor tests so they show together on VS This commit will make a VS geenrated project to group all tests under GSL_tests * Refactor tests configuration This creates a test configuration interface and add all the previous compiler options to that interface. compiler options are now sorted so it is easier to find them, and also one per line, so that modifications are easier to track from git.
2017-04-25 20:08:36 -04:00
add_library(GSL INTERFACE)
# NOTE: If you want to use GSL prefer to link against GSL using this alias target
# EX:
# target_link_libraries(foobar PRIVATE Microsoft.GSL::GSL)
#
# Add Microsoft.GSL::GSL alias for GSL so that dependents can be agnostic about
# whether GSL was added via `add_subdirectory` or `find_package`
add_library(Microsoft.GSL::GSL ALIAS GSL)
# Determine whether this is a standalone project or included by other projects
set(GSL_STANDALONE_PROJECT OFF)
if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
2020-05-04 16:31:08 -04:00
set(GSL_STANDALONE_PROJECT ON)
endif()
### Project options
option(GSL_INSTALL "Generate and install GSL target" ${GSL_STANDALONE_PROJECT})
option(GSL_TEST "Build and perform GSL tests" ${GSL_STANDALONE_PROJECT})
# This GSL implementation generally assumes a platform that implements C++14 support.
set(gsl_min_cxx_standard "14")
if (GSL_STANDALONE_PROJECT)
gsl_set_default_cxx_standard(${gsl_min_cxx_standard})
else()
gsl_client_set_cxx_standard(${gsl_min_cxx_standard})
Update CMake usage (#493) * Refactor cmake file to have GSL as an interface CMake supports header only libraries as INTERFACE libraries. Using interfaces libraries make is easier for users to use the library because one just need to "link" agaisnt the library and necessary include paths, definitions, flags... will be taken care of. This commit creates a new interface library called GSL. It then add the following things to the GSL library: - compiler flags ex: (-std=c++14) - definitions ex: _SCL_SECURE_NO_WARNINGS - include paths ex: include/gsl - natvis file Another project can now have the GSL project as a git submodule and one only need to add the two following lines to their project to use the GSL. add_subdirectory(GSL) target_link_libraries(<some target> GSL) After cmake 3.8.0 a lot of the logic can be simplified. Right now the cmake file has an if for version checking, but when the minimun required version is 3.8.0 one can just delete the branching and keep the simpler version. * Cut support for c++11 Compiling on GCC6.2 with only the c++11 flag will generate compilation errors. For example some of the errors are related to the use of enable_if_t which is a c++14 feature. To avoid compilation errors this comiit removes c++11 support on linux. * Refactor code that pulls unittest-cpp Two minor changes: - uses cmake to find a proper installation of git (in case user does not have it on the path) - checks for the CMakeLists file instead. This is needed for the build itself and seems like a better way to do the checking * Refactor tests so they show together on VS This commit will make a VS geenrated project to group all tests under GSL_tests * Refactor tests configuration This creates a test configuration interface and add all the previous compiler options to that interface. compiler options are now sorted so it is easier to find them, and also one per line, so that modifications are easier to track from git.
2017-04-25 20:08:36 -04:00
endif()
# Setup include directory
add_subdirectory(include)
# Add natvis file
gsl_add_native_visualizer_support()
Update CMake usage (#493) * Refactor cmake file to have GSL as an interface CMake supports header only libraries as INTERFACE libraries. Using interfaces libraries make is easier for users to use the library because one just need to "link" agaisnt the library and necessary include paths, definitions, flags... will be taken care of. This commit creates a new interface library called GSL. It then add the following things to the GSL library: - compiler flags ex: (-std=c++14) - definitions ex: _SCL_SECURE_NO_WARNINGS - include paths ex: include/gsl - natvis file Another project can now have the GSL project as a git submodule and one only need to add the two following lines to their project to use the GSL. add_subdirectory(GSL) target_link_libraries(<some target> GSL) After cmake 3.8.0 a lot of the logic can be simplified. Right now the cmake file has an if for version checking, but when the minimun required version is 3.8.0 one can just delete the branching and keep the simpler version. * Cut support for c++11 Compiling on GCC6.2 with only the c++11 flag will generate compilation errors. For example some of the errors are related to the use of enable_if_t which is a c++14 feature. To avoid compilation errors this comiit removes c++11 support on linux. * Refactor code that pulls unittest-cpp Two minor changes: - uses cmake to find a proper installation of git (in case user does not have it on the path) - checks for the CMakeLists file instead. This is needed for the build itself and seems like a better way to do the checking * Refactor tests so they show together on VS This commit will make a VS geenrated project to group all tests under GSL_tests * Refactor tests configuration This creates a test configuration interface and add all the previous compiler options to that interface. compiler options are now sorted so it is easier to find them, and also one per line, so that modifications are easier to track from git.
2017-04-25 20:08:36 -04:00
# Add packaging support
gsl_create_packaging_file()
if (GSL_INSTALL)
# Setup install/export logic
gsl_install_logic()
endif()
if (GSL_TEST)
2020-05-04 16:31:08 -04:00
enable_testing()
add_subdirectory(tests)
endif()