@@ -30,44 +30,95 @@ endif()
3030
3131include (GNUInstallDirs)
3232
33- # add_cpp_test()
33+ ################
34+ ## C++ Test ##
35+ ################
36+ # add_cxx_test()
3437# CMake function to generate and build C++ test.
3538# Parameters:
36- # the C++ filename
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
3746# e.g.:
38- # add_cpp_test(foo.cpp)
39- function (add_cpp_test FILE_NAME)
40- message (STATUS "Configuring test ${FILE_NAME} : ..." )
41- get_filename_component (TEST_NAME ${FILE_NAME} NAME_WE )
42- get_filename_component (TEST_DIR ${FILE_NAME} DIRECTORY )
43- get_filename_component (COMPONENT_DIR ${FILE_NAME} DIRECTORY )
44- get_filename_component (COMPONENT_NAME ${COMPONENT_DIR} NAME )
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 ()
4571
46- if (APPLE )
47- set ( CMAKE_INSTALL_RPATH
48- "@loader_path/../ ${CMAKE_INSTALL_LIBDIR} ;@loader_path" )
49- elseif ( UNIX )
50- set ( CMAKE_INSTALL_RPATH "$ORIGIN/../ ${CMAKE_INSTALL_LIBDIR} :$ORIGIN " )
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 " )
5177 endif ()
78+ message (STATUS "Configuring test ${TEST_NAME} ..." )
5279
53- add_executable (${TEST_NAME} ${FILE_NAME} )
80+ add_executable (${TEST_NAME} "" )
81+ target_sources (${TEST_NAME} PRIVATE ${TEST_SOURCES} )
5482 target_include_directories (${TEST_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} )
55- target_compile_features (${TEST_NAME} PRIVATE cxx_std_17)
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} )
5686 target_link_libraries (${TEST_NAME} PRIVATE
57- Catch2 Catch2WithMain
58- ${PROJECT_NAMESPACE} ::Foo
59- ${PROJECT_NAMESPACE} ::Bar
60- ${PROJECT_NAMESPACE} ::FooBar)
87+ GTest::gtest
88+ GTest::gtest_main
89+ ${TEST_LINK_LIBRARIES}
90+ )
91+ target_link_options (${TEST_NAME} PRIVATE ${TEST_LINK_OPTIONS} )
6192
62- if (BUILD_TESTING)
63- add_test (NAME cpp_${COMPONENT_NAME} _${TEST_NAME} COMMAND ${TEST_NAME} )
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" )
64103 endif ()
65- message (STATUS "Configuring test ${FILE_NAME} : ...DONE" )
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" )
66111endfunction ()
67112
68113###################
69114## CMake Install ##
70115###################
116+ include (GNUInstallDirs)
117+ #include(GenerateExportHeader)
118+ #GENERATE_EXPORT_HEADER(${PROJECT_NAME})
119+ #install(FILES ${PROJECT_BINARY_DIR}/${PROJECT_NAME}_export.h
120+ # DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
121+
71122install (EXPORT ${PROJECT_NAME} Targets
72123 NAMESPACE ${PROJECT_NAMESPACE} ::
73124 DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME}
0 commit comments