mirror of
https://github.com/catchorg/Catch2.git
synced 2024-12-27 13:13:30 +01:00
ad1940f336
There are some examples on issue #850 of using this feature, but they are not easily found from the documentation. Adding them here as an example makes them more findable and ensures they keep working if the API changes.
159 lines
5.3 KiB
CMake
159 lines
5.3 KiB
CMake
#
|
|
# Build examples.
|
|
#
|
|
# Requires CATCH_BUILD_EXAMPLES to be defined 'true', see ../CMakeLists.txt.
|
|
#
|
|
|
|
cmake_minimum_required( VERSION 3.0 )
|
|
|
|
project( CatchExamples CXX )
|
|
|
|
message( STATUS "Examples included" )
|
|
|
|
# define folders used:
|
|
|
|
set( EXAMPLES_DIR ${CATCH_DIR}/examples )
|
|
set( HEADER_DIR ${CATCH_DIR}/single_include )
|
|
set( REPORTER_HEADER_DIR ${CATCH_DIR}/include/reporters )
|
|
|
|
# single-file sources:
|
|
|
|
set( SOURCES_SINGLE_FILE
|
|
010-TestCase.cpp
|
|
231-Cfg-OutputStreams.cpp
|
|
)
|
|
|
|
# multiple-file modules:
|
|
|
|
set( SOURCES_020
|
|
020-TestCase-1.cpp
|
|
020-TestCase-2.cpp
|
|
)
|
|
|
|
# main for idiomatic test sources:
|
|
|
|
set( SOURCES_IDIOMATIC_MAIN
|
|
000-CatchMain.cpp
|
|
)
|
|
|
|
# sources to combine with 000-CatchMain.cpp:
|
|
|
|
set( SOURCES_IDIOMATIC_TESTS
|
|
030-Asn-Require-Check.cpp
|
|
100-Fix-Section.cpp
|
|
110-Fix-ClassFixture.cpp
|
|
120-Bdd-ScenarioGivenWhenThen.cpp
|
|
210-Evt-EventListeners.cpp
|
|
300-Gen-OwnGenerator.cpp
|
|
301-Gen-MapTypeConversion.cpp
|
|
302-Gen-Table.cpp
|
|
310-Gen-VariablesInGenerators.cpp
|
|
311-Gen-CustomCapture.cpp
|
|
)
|
|
|
|
# main-s for reporter-specific test sources:
|
|
|
|
set( SOURCES_REPORTERS_MAIN
|
|
200-Rpt-CatchMain.cpp
|
|
)
|
|
|
|
string( REPLACE ".cpp" "" BASENAMES_REPORTERS_MAIN 200-Rpt-CatchMain.cpp )
|
|
|
|
set( NAMES_REPORTERS TeamCity )
|
|
|
|
foreach( reporter ${NAMES_REPORTERS} )
|
|
list( APPEND SOURCES_SPECIFIC_REPORTERS_MAIN ${BASENAMES_REPORTERS_MAIN}${reporter}.cpp )
|
|
endforeach()
|
|
|
|
# sources to combine with 200-Rpt-CatchMain{Reporter}.cpp:
|
|
|
|
set( SOURCES_REPORTERS_TESTS
|
|
207-Rpt-TeamCityReporter.cpp
|
|
)
|
|
|
|
# check if all sources are listed, warn if not:
|
|
|
|
set( SOURCES_ALL
|
|
${SOURCES_020}
|
|
${SOURCES_SINGLE_FILE}
|
|
${SOURCES_IDIOMATIC_MAIN}
|
|
${SOURCES_IDIOMATIC_TESTS}
|
|
${SOURCES_REPORTERS_MAIN}
|
|
${SOURCES_REPORTERS_TESTS}
|
|
)
|
|
|
|
foreach( name ${SOURCES_ALL} )
|
|
list( APPEND SOURCES_ALL_PATH ${EXAMPLES_DIR}/${name} )
|
|
endforeach()
|
|
|
|
CheckFileList( SOURCES_ALL_PATH ${EXAMPLES_DIR} )
|
|
|
|
# create target names:
|
|
|
|
string( REPLACE ".cpp" "" BASENAMES_SINGLE_FILE "${SOURCES_SINGLE_FILE}" )
|
|
string( REPLACE ".cpp" "" BASENAMES_IDIOMATIC_TESTS "${SOURCES_IDIOMATIC_TESTS}" )
|
|
string( REPLACE ".cpp" "" BASENAMES_REPORTERS_TESTS "${SOURCES_REPORTERS_TESTS}" )
|
|
string( REPLACE ".cpp" "" BASENAMES_REPORTERS_MAIN "${SOURCES_REPORTERS_MAIN}" )
|
|
|
|
set( TARGETS_SINGLE_FILE ${BASENAMES_SINGLE_FILE} )
|
|
set( TARGETS_IDIOMATIC_TESTS ${BASENAMES_IDIOMATIC_TESTS} )
|
|
set( TARGETS_REPORTERS_TESTS ${BASENAMES_REPORTERS_TESTS} )
|
|
set( TARGETS_REPORTERS_MAIN ${BASENAMES_REPORTERS_MAIN} )
|
|
|
|
set( TARGETS_ALL
|
|
${TARGETS_SINGLE_FILE}
|
|
020-TestCase
|
|
${TARGETS_IDIOMATIC_TESTS} CatchMain
|
|
${TARGETS_REPORTERS_TESTS} CatchMainTeamCity
|
|
)
|
|
|
|
# define program targets:
|
|
|
|
add_library( CatchMain OBJECT ${EXAMPLES_DIR}/${SOURCES_IDIOMATIC_MAIN} ${HEADER_DIR}/catch2/catch.hpp )
|
|
#add_library( CatchMainAutomake OBJECT ${EXAMPLES_DIR}/200-Rpt-CatchMain.cpp ${HEADER_DIR}/catch2/catch.hpp )
|
|
#add_library( CatchMainTap OBJECT ${EXAMPLES_DIR}/200-Rpt-CatchMain.cpp ${HEADER_DIR}/catch2/catch.hpp )
|
|
add_library( CatchMainTeamCity OBJECT ${EXAMPLES_DIR}/200-Rpt-CatchMain.cpp ${HEADER_DIR}/catch2/catch.hpp )
|
|
|
|
#target_compile_definitions( CatchMainAutomake PRIVATE CATCH_EXAMPLE_RPT_1=\"include/reporters/catch_reporter_automake.hpp\" )
|
|
#target_compile_definitions( CatchMainTap PRIVATE CATCH_EXAMPLE_RPT_1=\"include/reporters/catch_reporter_tap.hpp\" )
|
|
target_compile_definitions( CatchMainTeamCity PRIVATE CATCH_EXAMPLE_RPT_1=\"include/reporters/catch_reporter_teamcity.hpp\" )
|
|
|
|
foreach( name ${TARGETS_SINGLE_FILE} )
|
|
add_executable( ${name} ${EXAMPLES_DIR}/${name}.cpp ${HEADER_DIR}/catch2/catch.hpp )
|
|
endforeach()
|
|
|
|
foreach( name ${TARGETS_IDIOMATIC_TESTS} )
|
|
add_executable( ${name} ${EXAMPLES_DIR}/${name}.cpp $<TARGET_OBJECTS:CatchMain> ${HEADER_DIR}/catch2/catch.hpp )
|
|
endforeach()
|
|
|
|
add_executable( 020-TestCase ${EXAMPLES_DIR}/020-TestCase-1.cpp ${EXAMPLES_DIR}/020-TestCase-2.cpp ${HEADER_DIR}/catch2/catch.hpp )
|
|
|
|
#add_executable( 207-Rpt-AutomakeReporter ${EXAMPLES_DIR}/207-Rpt-AutomakeReporter.cpp $<TARGET_OBJECTS:CatchMainAutomake> ${HEADER_DIR}/catch2/catch.hpp )
|
|
#add_executable( 207-Rpt-TapReporter ${EXAMPLES_DIR}/207-Rpt-TapReporter.cpp $<TARGET_OBJECTS:CatchMainTap> ${HEADER_DIR}/catch2/catch.hpp )
|
|
add_executable( 207-Rpt-TeamCityReporter ${EXAMPLES_DIR}/207-Rpt-TeamCityReporter.cpp $<TARGET_OBJECTS:CatchMainTeamCity> ${HEADER_DIR}/catch2/catch.hpp )
|
|
|
|
#foreach( name ${TARGETS_REPORTERS_TESTS} )
|
|
# add_executable( ${name} ${EXAMPLES_DIR}/${name}.cpp $<TARGET_OBJECTS:CatchMain> ${HEADER_DIR}/catch2/catch.hpp )
|
|
#endforeach()
|
|
|
|
foreach( name ${TARGETS_ALL} )
|
|
target_include_directories( ${name} PRIVATE ${HEADER_DIR} ${CATCH_DIR} )
|
|
|
|
set_property(TARGET ${name} PROPERTY CXX_STANDARD 11)
|
|
set_property(TARGET ${name} PROPERTY CXX_EXTENSIONS OFF)
|
|
|
|
# Add desired warnings
|
|
if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang|AppleClang|GNU" )
|
|
target_compile_options( ${name} PRIVATE -Wall -Wextra -Wunreachable-code )
|
|
endif()
|
|
# Clang specific warning go here
|
|
if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
|
# Actually keep these
|
|
target_compile_options( ${name} PRIVATE -Wweak-vtables -Wexit-time-destructors -Wglobal-constructors -Wmissing-noreturn )
|
|
endif()
|
|
if ( CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
|
|
target_compile_options( ${name} PRIVATE /W4 /w44265 /WX )
|
|
endif()
|
|
endforeach()
|
|
|