mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-03 21:49:32 +01:00 
			
		
		
		
	Update building of examples for static lib
This commit is contained in:
		@@ -1,44 +1,27 @@
 | 
			
		||||
#
 | 
			
		||||
# Build examples.
 | 
			
		||||
#
 | 
			
		||||
# Requires CATCH_BUILD_EXAMPLES to be defined 'true', see ../CMakeLists.txt.
 | 
			
		||||
#
 | 
			
		||||
cmake_minimum_required( VERSION 3.5 )
 | 
			
		||||
 | 
			
		||||
cmake_minimum_required( VERSION 3.0 )
 | 
			
		||||
 | 
			
		||||
project( CatchExamples CXX )
 | 
			
		||||
project( Catch2Examples LANGUAGES 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
 | 
			
		||||
# Some one-offs first:
 | 
			
		||||
# 1) Tests and main in one file
 | 
			
		||||
add_executable( 010-TestCase
 | 
			
		||||
  010-TestCase.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# multiple-file modules:
 | 
			
		||||
 | 
			
		||||
set( SOURCES_020
 | 
			
		||||
    020-TestCase-1.cpp
 | 
			
		||||
    020-TestCase-2.cpp
 | 
			
		||||
# 2) Tests and main across two files
 | 
			
		||||
add_executable( 020-MultiFile
 | 
			
		||||
  020-TestCase-1.cpp
 | 
			
		||||
  020-TestCase-2.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# main for idiomatic test sources:
 | 
			
		||||
# TODO: How to handle differently configured libraries?
 | 
			
		||||
#       Needed in 231-Cfg-OutputStreams
 | 
			
		||||
 | 
			
		||||
set( SOURCES_IDIOMATIC_MAIN
 | 
			
		||||
    000-CatchMain.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# sources to combine with 000-CatchMain.cpp:
 | 
			
		||||
 | 
			
		||||
set( SOURCES_IDIOMATIC_TESTS
 | 
			
		||||
# These examples use the standard separate compilation
 | 
			
		||||
set( SOURCES_IDIOMATIC_EXAMPLES
 | 
			
		||||
    030-Asn-Require-Check.cpp
 | 
			
		||||
    100-Fix-Section.cpp
 | 
			
		||||
    110-Fix-ClassFixture.cpp
 | 
			
		||||
@@ -50,94 +33,24 @@ set( SOURCES_IDIOMATIC_TESTS
 | 
			
		||||
    311-Gen-CustomCapture.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# main-s for reporter-specific test sources:
 | 
			
		||||
string( REPLACE ".cpp" "" BASENAMES_IDIOMATIC_EXAMPLES "${SOURCES_IDIOMATIC_EXAMPLES}" )
 | 
			
		||||
set( TARGETS_IDIOMATIC_EXAMPLES ${BASENAMES_IDIOMATIC_EXAMPLES} )
 | 
			
		||||
 | 
			
		||||
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 )
 | 
			
		||||
foreach( name ${TARGETS_IDIOMATIC_EXAMPLES} )
 | 
			
		||||
    add_executable( ${name}
 | 
			
		||||
      000-CatchMain.cpp
 | 
			
		||||
      ${EXAMPLES_DIR}/${name}.cpp )
 | 
			
		||||
endforeach()
 | 
			
		||||
 | 
			
		||||
# sources to combine with 200-Rpt-CatchMain{Reporter}.cpp:
 | 
			
		||||
 | 
			
		||||
set( SOURCES_REPORTERS_TESTS
 | 
			
		||||
    207-Rpt-TeamCityReporter.cpp
 | 
			
		||||
set(ALL_EXAMPLE_TARGETS
 | 
			
		||||
  ${TARGETS_IDIOMATIC_EXAMPLES}
 | 
			
		||||
  010-TestCase
 | 
			
		||||
  020-MultiFile
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# 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} )
 | 
			
		||||
 | 
			
		||||
foreach( name ${ALL_EXAMPLE_TARGETS} )
 | 
			
		||||
    target_link_libraries( ${name} Catch2 )
 | 
			
		||||
    set_property(TARGET ${name} PROPERTY CXX_STANDARD 14)
 | 
			
		||||
    set_property(TARGET ${name} PROPERTY CXX_EXTENSIONS OFF)
 | 
			
		||||
 | 
			
		||||
@@ -154,4 +67,3 @@ foreach( name ${TARGETS_ALL} )
 | 
			
		||||
        target_compile_options( ${name}  PRIVATE /W4 /w44265 /WX )
 | 
			
		||||
    endif()
 | 
			
		||||
endforeach()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user