1
- enable_language (CXX)
2
- set (CMAKE_CXX_STANDARD 20)
3
- set (CMAKE_CXX_STANDARD_REQUIRED ON )
4
- set (CMAKE_CXX_EXTENSIONS OFF )
5
-
6
1
# Check primitive types
7
2
option (CHECK_TYPE "Check primitive type size" OFF )
8
3
if (CHECK_TYPE)
@@ -33,83 +28,6 @@ if(CHECK_TYPE)
33
28
cmake_pop_check_state()
34
29
endif ()
35
30
36
- # Check dependencies
37
- set (CMAKE_THREAD_PREFER_PTHREAD TRUE )
38
- set (THREAD_PREFER_PTHREAD_FLAG TRUE )
39
- find_package (Threads REQUIRED)
40
-
41
- include (FetchContent)
42
- set (FETCHCONTENT_QUIET OFF )
43
- set (FETCHCONTENT_UPDATES_DISCONNECTED ON )
44
- set (CMAKE_POSITION_INDEPENDENT_CODE ON )
45
- set (CMAKE_Fortran_COMPILER OFF )
46
-
47
- # ##############################################################################
48
- # ABSEIL-CPP
49
- # ##############################################################################
50
- message (CHECK_START "Fetching Abseil-cpp" )
51
- list (APPEND CMAKE_MESSAGE_INDENT " " )
52
- set (ABSL_USE_SYSTEM_INCLUDES ON )
53
- # We want Abseil to declare what C++ standard it was compiled with.
54
- set (ABSL_PROPAGATE_CXX_STD ON )
55
- # We want Abseil to keep the INSTALL rules enabled, even though it is a
56
- # subproject. Otherwise the install rules in this project break.
57
- set (ABSL_ENABLE_INSTALL ON )
58
- FetchContent_Declare(
59
- absl
60
- GIT_REPOSITORY "https://github.com/abseil/abseil-cpp.git"
61
- GIT_TAG "20240116.2"
62
- GIT_SHALLOW TRUE
63
- PATCH_COMMAND git apply --ignore -whitespace "${CMAKE_CURRENT_LIST_DIR} /../patches/abseil-cpp-20240116.2.patch"
64
- OVERRIDE_FIND_PACKAGE)
65
- FetchContent_MakeAvailable(absl)
66
- list (POP_BACK CMAKE_MESSAGE_INDENT)
67
- message (CHECK_PASS "fetched" )
68
-
69
- # ##############################################################################
70
- # Protobuf
71
- # ##############################################################################
72
- message (CHECK_START "Fetching Protobuf" )
73
- list (APPEND CMAKE_MESSAGE_INDENT " " )
74
- set (protobuf_BUILD_TESTS OFF )
75
- set (protobuf_BUILD_SHARED_LIBS OFF )
76
- set (protobuf_BUILD_EXPORT OFF )
77
- set (protobuf_MSVC_STATIC_RUNTIME OFF )
78
- set (protobuf_WITH_ZLIB OFF )
79
- FetchContent_Declare(
80
- protobuf
81
- GIT_REPOSITORY "https://github.com/protocolbuffers/protobuf.git"
82
- GIT_TAG "v27.2"
83
- GIT_SUBMODULES ""
84
- GIT_SHALLOW TRUE
85
- PATCH_COMMAND git apply --ignore -whitespace "${CMAKE_CURRENT_LIST_DIR} /../patches/protobuf-v27.2.patch" )
86
- FetchContent_MakeAvailable(protobuf)
87
- list (POP_BACK CMAKE_MESSAGE_INDENT)
88
- message (CHECK_PASS "fetched" )
89
-
90
- if (BUILD_TESTING)
91
- message (CHECK_START "Fetching Googletest" )
92
- FetchContent_Declare(
93
- googletest
94
- GIT_REPOSITORY https://github.com/google/googletest.git
95
- GIT_TAG main
96
- GIT_SHALLOW TRUE
97
- FIND_PACKAGE_ARGS NAMES GTest GMock)
98
- #set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
99
- FetchContent_MakeAvailable(googletest)
100
- message (CHECK_PASS "fetched" )
101
-
102
- message (CHECK_START "Fetching Catch2" )
103
- FetchContent_Declare(
104
- Catch2
105
- GIT_REPOSITORY https://github.com/catchorg/Catch2.git
106
- GIT_TAG devel
107
- GIT_SHALLOW TRUE
108
- FIND_PACKAGE_ARGS)
109
- FetchContent_MakeAvailable(Catch2)
110
- message (CHECK_PASS "fetched" )
111
- endif ()
112
-
113
31
include (GNUInstallDirs)
114
32
115
33
# add_cpp_test()
@@ -136,7 +54,8 @@ function(add_cpp_test FILE_NAME)
136
54
target_include_directories (${TEST_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} )
137
55
target_compile_features (${TEST_NAME} PRIVATE cxx_std_20)
138
56
target_link_libraries (${TEST_NAME} PRIVATE
139
- Catch2 Catch2WithMain
57
+ #GTest::gtest_main
58
+ Catch2::Catch2WithMain
140
59
${PROJECT_NAMESPACE} ::Foo
141
60
${PROJECT_NAMESPACE} ::Bar
142
61
${PROJECT_NAMESPACE} ::FooBar)
@@ -152,13 +71,6 @@ add_subdirectory(Bar)
152
71
add_subdirectory (FooBar)
153
72
154
73
add_library (Full)
155
- target_include_directories (Full
156
- PUBLIC
157
- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /Foo/include >
158
- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /Bar/include >
159
- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /FooBar/include >
160
- $<INSTALL_INTERFACE:include >)
161
- #target_link_libraries(Full INTERFACE
162
74
# Xcode fails to build if library doesn't contains at least one source file.
163
75
if (XCODE)
164
76
file (GENERATE
@@ -171,14 +83,28 @@ target_sources(Full PRIVATE
171
83
$<TARGET_OBJECTS:Foo>
172
84
$<TARGET_OBJECTS:FooBar>
173
85
)
86
+ target_include_directories (Full
87
+ PUBLIC
88
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /Foo/include >
89
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /Bar/include >
90
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /FooBar/include >
91
+ $<INSTALL_INTERFACE:include >)
92
+ target_compile_features (Full PUBLIC cxx_std_20)
93
+ set_target_properties (Full PROPERTIES VERSION ${PROJECT_VERSION} )
94
+ if (APPLE )
95
+ set_target_properties (Full PROPERTIES INSTALL_RPATH "@loader_path" )
96
+ elseif (UNIX )
97
+ set_target_properties (Full PROPERTIES INSTALL_RPATH "$ORIGIN" )
98
+ endif ()
99
+ target_link_libraries (Full PRIVATE absl::log )
174
100
add_library (${PROJECT_NAMESPACE} ::Full ALIAS Full)
175
101
install (TARGETS Full
176
102
EXPORT ${PROJECT_NAME} Targets
177
103
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /foobar
178
104
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
179
105
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
180
106
#RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
181
- )
107
+ )
182
108
183
109
add_subdirectory (FooBarApp)
184
110
0 commit comments