mirror of
https://github.com/microsoft/GSL.git
synced 2024-11-25 09:11:58 -05:00
afaaa71bce
Turns out supporting GSL.natvis perfectly is quite difficult. There is no universal way to consume .natvis files that would satisfy everyone. I thought the solution was to use the /NATVIS linker option. But it turns out that actually embeds information into the PDB. So I'm not sure how to properly support the Ninja generator... That's not even accounting for the fact target_link_options doesn't play nicely with /NATVIS When you just add the file via target_sources the visual studio solution will just pick it up and recognize it without adding it to the PDB file. Which won't affect the binary and is what most devs want. This all comes down to the fact that /NATVIS files have native integration with visual studio that makes it difficult to use with non-visual studio solutions. /NATVIS almost works but embeds itself into the PDB which not everyone wants, and not everyone generates PDBs either. Docs for natvis files and /NATVIS - https://learn.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects?view=vs-2022 - https://learn.microsoft.com/en-us/cpp/build/reference/natvis-add-natvis-to-pdb?view=msvc-170 So my current solution is to just simplify the existing CMake code, and install the natvis so the user can decide. closes #1084
49 lines
1.7 KiB
CMake
49 lines
1.7 KiB
CMake
cmake_minimum_required(VERSION 3.14...3.16)
|
|
|
|
project(GSL VERSION 4.0.0 LANGUAGES CXX)
|
|
|
|
add_library(GSL INTERFACE)
|
|
add_library(Microsoft.GSL::GSL ALIAS GSL)
|
|
|
|
# https://cmake.org/cmake/help/latest/variable/PROJECT_IS_TOP_LEVEL.html
|
|
string(COMPARE EQUAL ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} PROJECT_IS_TOP_LEVEL)
|
|
|
|
option(GSL_INSTALL "Generate and install GSL target" ${PROJECT_IS_TOP_LEVEL})
|
|
option(GSL_TEST "Build and perform GSL tests" ${PROJECT_IS_TOP_LEVEL})
|
|
|
|
# The implementation generally assumes a platform that implements C++14 support
|
|
target_compile_features(GSL INTERFACE "cxx_std_14")
|
|
|
|
# Setup include directory
|
|
add_subdirectory(include)
|
|
|
|
target_sources(GSL INTERFACE $<BUILD_INTERFACE:${GSL_SOURCE_DIR}/GSL.natvis>)
|
|
|
|
if (GSL_TEST)
|
|
enable_testing()
|
|
add_subdirectory(tests)
|
|
endif()
|
|
|
|
if (GSL_INSTALL)
|
|
include(GNUInstallDirs)
|
|
include(CMakePackageConfigHelpers)
|
|
|
|
install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/gsl" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
|
|
|
set(export_name "Microsoft.GSLConfig")
|
|
set(namespace "Microsoft.GSL::")
|
|
set(cmake_files_install_dir ${CMAKE_INSTALL_DATADIR}/cmake/Microsoft.GSL)
|
|
|
|
install(TARGETS GSL EXPORT ${export_name} INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
|
install(EXPORT ${export_name} NAMESPACE ${namespace} DESTINATION ${cmake_files_install_dir})
|
|
export(TARGETS GSL NAMESPACE ${namespace} FILE ${export_name}.cmake)
|
|
|
|
set(gls_config_version "${CMAKE_CURRENT_BINARY_DIR}/Microsoft.GSLConfigVersion.cmake")
|
|
|
|
write_basic_package_version_file(${gls_config_version} COMPATIBILITY SameMajorVersion ARCH_INDEPENDENT)
|
|
|
|
install(FILES ${gls_config_version} DESTINATION ${cmake_files_install_dir})
|
|
|
|
install(FILES GSL.natvis DESTINATION ${cmake_files_install_dir})
|
|
endif()
|