@@ -28,88 +28,6 @@ if(CHECK_TYPE)
2828 cmake_pop_check_state()
2929endif ()
3030
31- include (GNUInstallDirs)
32-
33- ################
34- ## C++ Test ##
35- ################
36- # add_cxx_test()
37- # CMake function to generate and build C++ test.
38- # Parameters:
39- # NAME: CMake target name
40- # SOURCES: List of source files
41- # [COMPILE_DEFINITIONS]: List of private compile definitions
42- # [COMPILE_OPTIONS]: List of private compile options
43- # [LINK_LIBRARIES]: List of private libraries to use when linking
44- # note: ortools::ortools is always linked to the target
45- # [LINK_OPTIONS]: List of private link options
46- # e.g.:
47- # add_cxx_test(
48- # NAME
49- # foo_test
50- # SOURCES
51- # foo_test.cc
52- # ${PROJECT_SOURCE_DIR}/Foo/foo_test.cc
53- # LINK_LIBRARIES
54- # GTest::gmock
55- # GTest::gtest_main
56- # )
57- function (add_cxx_test)
58- set (options "" )
59- set (oneValueArgs "NAME" )
60- set (multiValueArgs
61- "SOURCES;COMPILE_DEFINITIONS;COMPILE_OPTIONS;LINK_LIBRARIES;LINK_OPTIONS" )
62- cmake_parse_arguments (TEST
63- "${options} "
64- "${oneValueArgs} "
65- "${multiValueArgs} "
66- ${ARGN}
67- )
68- if (NOT BUILD_TESTING)
69- return ()
70- endif ()
71-
72- if (NOT TEST_NAME)
73- message (FATAL_ERROR "no NAME provided" )
74- endif ()
75- if (NOT TEST_SOURCES)
76- message (FATAL_ERROR "no SOURCES provided" )
77- endif ()
78- message (STATUS "Configuring test ${TEST_NAME} ..." )
79-
80- add_executable (${TEST_NAME} "" )
81- target_sources (${TEST_NAME} PRIVATE ${TEST_SOURCES} )
82- target_include_directories (${TEST_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} )
83- target_compile_definitions (${TEST_NAME} PRIVATE ${TEST_COMPILE_DEFINITIONS} )
84- target_compile_features (${TEST_NAME} PRIVATE cxx_std_20)
85- target_compile_options (${TEST_NAME} PRIVATE ${TEST_COMPILE_OPTIONS} )
86- target_link_libraries (${TEST_NAME} PRIVATE
87- GTest::gtest
88- GTest::gtest_main
89- ${TEST_LINK_LIBRARIES}
90- )
91- target_link_options (${TEST_NAME} PRIVATE ${TEST_LINK_OPTIONS} )
92-
93- include (GNUInstallDirs)
94- if (APPLE )
95- set_target_properties (${TEST_NAME} PROPERTIES
96- INSTALL_RPATH "@loader_path/../${CMAKE_INSTALL_LIBDIR} ;@loader_path" )
97- elseif (UNIX )
98- cmake_path(RELATIVE_PATH CMAKE_INSTALL_FULL_LIBDIR
99- BASE_DIRECTORY ${CMAKE_INSTALL_FULL_BINDIR}
100- OUTPUT_VARIABLE libdir_relative_path)
101- set_target_properties (${TEST_NAME} PROPERTIES
102- INSTALL_RPATH "$ORIGIN/${libdir_relative_path} :$ORIGIN" )
103- endif ()
104-
105- add_test (
106- NAME cxx_${TEST_NAME}
107- COMMAND ${TEST_NAME}
108- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
109- )
110- message (STATUS "Configuring test ${TEST_NAME} ...DONE" )
111- endfunction ()
112-
11331###################
11432## C++ Library ##
11533###################
@@ -210,6 +128,86 @@ function(add_cxx_library)
210128 message (STATUS "Configuring library ${LIBRARY_NAME} ...DONE" )
211129endfunction ()
212130
131+ ################
132+ ## C++ Test ##
133+ ################
134+ # add_cxx_test()
135+ # CMake function to generate and build C++ test.
136+ # Parameters:
137+ # NAME: CMake target name
138+ # SOURCES: List of source files
139+ # [COMPILE_DEFINITIONS]: List of private compile definitions
140+ # [COMPILE_OPTIONS]: List of private compile options
141+ # [LINK_LIBRARIES]: List of private libraries to use when linking
142+ # note: ortools::ortools is always linked to the target
143+ # [LINK_OPTIONS]: List of private link options
144+ # e.g.:
145+ # add_cxx_test(
146+ # NAME
147+ # foo_test
148+ # SOURCES
149+ # foo_test.cc
150+ # ${PROJECT_SOURCE_DIR}/Foo/foo_test.cc
151+ # LINK_LIBRARIES
152+ # GTest::gmock
153+ # GTest::gtest_main
154+ # )
155+ function (add_cxx_test)
156+ set (options "" )
157+ set (oneValueArgs "NAME" )
158+ set (multiValueArgs
159+ "SOURCES;COMPILE_DEFINITIONS;COMPILE_OPTIONS;LINK_LIBRARIES;LINK_OPTIONS" )
160+ cmake_parse_arguments (TEST
161+ "${options} "
162+ "${oneValueArgs} "
163+ "${multiValueArgs} "
164+ ${ARGN}
165+ )
166+ if (NOT BUILD_TESTING)
167+ return ()
168+ endif ()
169+
170+ if (NOT TEST_NAME)
171+ message (FATAL_ERROR "no NAME provided" )
172+ endif ()
173+ if (NOT TEST_SOURCES)
174+ message (FATAL_ERROR "no SOURCES provided" )
175+ endif ()
176+ message (STATUS "Configuring test ${TEST_NAME} ..." )
177+
178+ add_executable (${TEST_NAME} "" )
179+ target_sources (${TEST_NAME} PRIVATE ${TEST_SOURCES} )
180+ target_include_directories (${TEST_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} )
181+ target_compile_definitions (${TEST_NAME} PRIVATE ${TEST_COMPILE_DEFINITIONS} )
182+ target_compile_features (${TEST_NAME} PRIVATE cxx_std_20)
183+ target_compile_options (${TEST_NAME} PRIVATE ${TEST_COMPILE_OPTIONS} )
184+ target_link_libraries (${TEST_NAME} PRIVATE
185+ GTest::gtest
186+ GTest::gtest_main
187+ ${TEST_LINK_LIBRARIES}
188+ )
189+ target_link_options (${TEST_NAME} PRIVATE ${TEST_LINK_OPTIONS} )
190+
191+ include (GNUInstallDirs)
192+ if (APPLE )
193+ set_target_properties (${TEST_NAME} PROPERTIES
194+ INSTALL_RPATH "@loader_path/../${CMAKE_INSTALL_LIBDIR} ;@loader_path" )
195+ elseif (UNIX )
196+ cmake_path(RELATIVE_PATH CMAKE_INSTALL_FULL_LIBDIR
197+ BASE_DIRECTORY ${CMAKE_INSTALL_FULL_BINDIR}
198+ OUTPUT_VARIABLE libdir_relative_path)
199+ set_target_properties (${TEST_NAME} PROPERTIES
200+ INSTALL_RPATH "$ORIGIN/${libdir_relative_path} :$ORIGIN" )
201+ endif ()
202+
203+ add_test (
204+ NAME cxx_${TEST_NAME}
205+ COMMAND ${TEST_NAME}
206+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
207+ )
208+ message (STATUS "Configuring test ${TEST_NAME} ...DONE" )
209+ endfunction ()
210+
213211###################
214212## C++ Example ##
215213###################
@@ -298,7 +296,6 @@ include(GNUInstallDirs)
298296#GENERATE_EXPORT_HEADER(${PROJECT_NAME})
299297#install(FILES ${PROJECT_BINARY_DIR}/${PROJECT_NAME}_export.h
300298# DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
301-
302299install (EXPORT ${PROJECT_NAME} Targets
303300 NAMESPACE ${PROJECT_NAMESPACE} ::
304301 DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME}
0 commit comments