-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
135 lines (112 loc) · 4.18 KB
/
Copy pathCMakeLists.txt
File metadata and controls
135 lines (112 loc) · 4.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
cmake_minimum_required(VERSION 3.15...3.24)
project(numsim-propex LANGUAGES CXX)
include(FetchContent)
# Set project include directory
set(${PROJECT_NAME}_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include/${PROJECT_NAME})
# Set C++ standard requirements
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Include meta information
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/project-meta-info.in")
include("${CMAKE_CURRENT_LIST_DIR}/project-meta-info.in")
else()
message(WARNING "Meta info file not found: ${CMAKE_CURRENT_LIST_DIR}/project-meta-info.in")
endif()
# Project version
set(${PROJECT_NAME}_VERSION ${project_version})
message(STATUS "Building v${${PROJECT_NAME}_VERSION}")
# Header files
# ============
set(${PROJECT_NAME}_HEADER
include/propex/ownership_policies.h
)
# Add the library
add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_HEADER}
include/propex/ownership_policies.h
include/propex/propex_registry.h
include/propex/key_traits.h
include/propex/property_view.h
include/propex/propex_fwd.h
include/propex/propex_node.h
)
# Explicitly set the linker language
set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX)
# Add alias for easier linking
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
# Include directories
target_include_directories(
${PROJECT_NAME}
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
# Enable required C++ features
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)
# Build options
option(${PROJECT_NAME}_INSTALL_LIBRARY "Enable installing of ${PROJECT_NAME} library" ON)
option(BUILD_EXAMPLES "Build ${PROJECT_NAME} examples" ON)
option(BUILD_TESTS "Build ${PROJECT_NAME} test suite" ON)
option(DOWNLOAD_GTEST "Download and build GTest" OFF)
option(DOWNLOAD_GBENCHMARK "Download and build Google Benchmark" OFF)
# Installation logic
include(GNUInstallDirs)
if(${PROJECT_NAME}_INSTALL_LIBRARY)
install(
TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}_Targets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
# Install header files
install(FILES ${${PROJECT_NAME}_HEADER}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})
# Create and install package config files
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
VERSION ${${PROJECT_NAME}_VERSION}
COMPATIBILITY SameMajorVersion
)
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in"
"${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake
)
install(
FILES "${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
"${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake
)
install(
EXPORT ${PROJECT_NAME}_Targets
FILE ${PROJECT_NAME}Targets.cmake
NAMESPACE ${PROJECT_NAME}::
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake
)
endif()
# Optional subdirectories
if(BUILD_TESTS)
enable_testing()
include(CTest)
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
)
# For Windows: Prevent overriding the parent project's compiler/linker settings
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
include(GoogleTest)
# Uncomment when tests exist
add_subdirectory(tests)
endif()
if(BUILD_EXAMPLES)
# Uncomment when examples exist
#add_subdirectory(examples)
endif()
# CPack configuration
set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
set(CPACK_PACKAGE_VERSION ${${PROJECT_NAME}_VERSION})
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "NumSim Materials Library")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
include(CPack)