mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 12:17:11 +01:00 
			
		
		
		
	Update building of examples for static lib
This commit is contained in:
		| @@ -6,6 +6,10 @@ if(NOT DEFINED PROJECT_NAME) | |||||||
|   set(NOT_SUBPROJECT ON) |   set(NOT_SUBPROJECT ON) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
|  | option(CATCH_BUILD_TESTING "Build SelfTest project" ON) | ||||||
|  | option(CATCH_BUILD_EXAMPLES "Build documentation examples" OFF) | ||||||
|  |  | ||||||
|  |  | ||||||
| # Catch2's build breaks if done in-tree. You probably should not build | # Catch2's build breaks if done in-tree. You probably should not build | ||||||
| # things in tree anyway, but we can allow projects that include Catch2 | # things in tree anyway, but we can allow projects that include Catch2 | ||||||
| # as a subproject to build in-tree as long as it is not in our tree. | # as a subproject to build in-tree as long as it is not in our tree. | ||||||
| @@ -28,20 +32,31 @@ set(CATCH_DIR ${CMAKE_CURRENT_SOURCE_DIR}) | |||||||
| set(SOURCES_DIR ${CATCH_DIR}/src/catch2) | set(SOURCES_DIR ${CATCH_DIR}/src/catch2) | ||||||
| set(SELF_TEST_DIR ${CATCH_DIR}/tests/SelfTest) | set(SELF_TEST_DIR ${CATCH_DIR}/tests/SelfTest) | ||||||
| set(BENCHMARK_DIR ${CATCH_DIR}/tests/Benchmark) | set(BENCHMARK_DIR ${CATCH_DIR}/tests/Benchmark) | ||||||
|  | set(EXAMPLES_DIR ${CATCH_DIR}/examples) | ||||||
|  |  | ||||||
| add_subdirectory(src) | add_subdirectory(src) | ||||||
| add_subdirectory(tests) |  | ||||||
|  | # Build tests only if requested | ||||||
|  | if (BUILD_TESTING AND CATCH_BUILD_TESTING AND NOT_SUBPROJECT) | ||||||
|  |     find_package(PythonInterp) | ||||||
|  |     if (NOT PYTHONINTERP_FOUND) | ||||||
|  |         message(FATAL_ERROR "Python not found, but required for tests") | ||||||
|  |     endif() | ||||||
|  |     add_subdirectory(tests) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | if(CATCH_BUILD_EXAMPLES) | ||||||
|  |     add_subdirectory(examples) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  |  | ||||||
| #option(CATCH_USE_VALGRIND "Perform SelfTests with Valgrind" OFF) | #option(CATCH_USE_VALGRIND "Perform SelfTests with Valgrind" OFF) | ||||||
| #option(CATCH_BUILD_TESTING "Build SelfTest project" ON) |  | ||||||
| #option(CATCH_BUILD_EXAMPLES "Build documentation examples" OFF) |  | ||||||
| #option(CATCH_BUILD_EXTRA_TESTS "Build extra tests" OFF) | #option(CATCH_BUILD_EXTRA_TESTS "Build extra tests" OFF) | ||||||
| #option(CATCH_ENABLE_COVERAGE "Generate coverage for codecov.io" OFF) | #option(CATCH_ENABLE_COVERAGE "Generate coverage for codecov.io" OFF) | ||||||
| #option(CATCH_ENABLE_WERROR "Enable all warnings as errors" ON) | #option(CATCH_ENABLE_WERROR "Enable all warnings as errors" ON) | ||||||
| #option(CATCH_INSTALL_DOCS "Install documentation alongside library" ON) | #option(CATCH_INSTALL_DOCS "Install documentation alongside library" ON) | ||||||
| #option(CATCH_INSTALL_EXTRAS "Install extras alongside library" ON) | #option(CATCH_INSTALL_EXTRAS "Install extras alongside library" ON) | ||||||
| # | # | ||||||
| # |  | ||||||
| #set_property(GLOBAL PROPERTY USE_FOLDERS ON) | #set_property(GLOBAL PROPERTY USE_FOLDERS ON) | ||||||
| # | # | ||||||
| #if(USE_WMAIN) | #if(USE_WMAIN) | ||||||
| @@ -56,10 +71,6 @@ add_subdirectory(tests) | |||||||
| #    add_subdirectory(projects) | #    add_subdirectory(projects) | ||||||
| #endif() | #endif() | ||||||
| # | # | ||||||
| #if(CATCH_BUILD_EXAMPLES) |  | ||||||
| #    add_subdirectory(examples) |  | ||||||
| #endif() |  | ||||||
| # |  | ||||||
| #if(CATCH_BUILD_EXTRA_TESTS) | #if(CATCH_BUILD_EXTRA_TESTS) | ||||||
| #    add_subdirectory(projects/ExtraTests) | #    add_subdirectory(projects/ExtraTests) | ||||||
| #endif() | #endif() | ||||||
|   | |||||||
| @@ -10,8 +10,6 @@ | |||||||
| - Fixture: [Sections](../examples/100-Fix-Section.cpp) | - Fixture: [Sections](../examples/100-Fix-Section.cpp) | ||||||
| - Fixture: [Class-based fixtures](../examples/110-Fix-ClassFixture.cpp) | - Fixture: [Class-based fixtures](../examples/110-Fix-ClassFixture.cpp) | ||||||
| - BDD: [SCENARIO, GIVEN, WHEN, THEN](../examples/120-Bdd-ScenarioGivenWhenThen.cpp) | - BDD: [SCENARIO, GIVEN, WHEN, THEN](../examples/120-Bdd-ScenarioGivenWhenThen.cpp) | ||||||
| - Report: [Catch-provided main](../examples/200-Rpt-CatchMain.cpp) |  | ||||||
| - Report: [TeamCity reporter](../examples/207-Rpt-TeamCityReporter.cpp) |  | ||||||
| - Listener: [Listeners](../examples/210-Evt-EventListeners.cpp) | - Listener: [Listeners](../examples/210-Evt-EventListeners.cpp) | ||||||
| - Configuration: [Provide your own output streams](../examples/231-Cfg-OutputStreams.cpp) | - Configuration: [Provide your own output streams](../examples/231-Cfg-OutputStreams.cpp) | ||||||
| - Generators: [Create your own generator](../examples/300-Gen-OwnGenerator.cpp) | - Generators: [Create your own generator](../examples/300-Gen-OwnGenerator.cpp) | ||||||
|   | |||||||
| @@ -1,12 +1,10 @@ | |||||||
| // 000-CatchMain.cpp | // 000-CatchMain.cpp | ||||||
|  |  | ||||||
| // In a Catch project with multiple files, dedicate one file to compile the | // It is generally recommended to have a single file provide the main | ||||||
| // source code of Catch itself and reuse the resulting object file for linking. | // of a testing binary, and other test files to link against it. | ||||||
|  |  | ||||||
| // Let Catch provide main(): | // Let Catch provide main(): | ||||||
| #define CATCH_CONFIG_MAIN | #include <catch2/catch_default_main.hpp> | ||||||
|  |  | ||||||
| #include <catch2/catch.hpp> |  | ||||||
|  |  | ||||||
| // That's it | // That's it | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,9 @@ | |||||||
| // 010-TestCase.cpp | // 010-TestCase.cpp | ||||||
|  |  | ||||||
| // Let Catch provide main(): | // Let Catch provide main(): | ||||||
| #define CATCH_CONFIG_MAIN | #include <catch2/catch_default_main.hpp> | ||||||
|  |  | ||||||
|  | // And write tests in the same file: | ||||||
| #include <catch2/catch.hpp> | #include <catch2/catch.hpp> | ||||||
|  |  | ||||||
| int Factorial( int number ) { | int Factorial( int number ) { | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
| // source code of Catch itself and reuse the resulting object file for linking. | // source code of Catch itself and reuse the resulting object file for linking. | ||||||
|  |  | ||||||
| // Let Catch provide main(): | // Let Catch provide main(): | ||||||
| #define CATCH_CONFIG_MAIN | #include <catch2/catch_default_main.hpp> | ||||||
|  |  | ||||||
| #include <catch2/catch.hpp> | #include <catch2/catch.hpp> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,27 +0,0 @@ | |||||||
| // 200-Rpt-CatchMain.cpp |  | ||||||
|  |  | ||||||
| // In a Catch project with multiple files, dedicate one file to compile the |  | ||||||
| // source code of Catch itself and reuse the resulting object file for linking. |  | ||||||
|  |  | ||||||
| // Let Catch provide main(): |  | ||||||
| #define CATCH_CONFIG_MAIN |  | ||||||
|  |  | ||||||
| #include <catch2/catch.hpp> |  | ||||||
|  |  | ||||||
| #ifdef   CATCH_EXAMPLE_RPT_1 |  | ||||||
| #include CATCH_EXAMPLE_RPT_1 |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef   CATCH_EXAMPLE_RPT_2 |  | ||||||
| #include CATCH_EXAMPLE_RPT_2 |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef   CATCH_EXAMPLE_RPT_3 |  | ||||||
| #include CATCH_EXAMPLE_RPT_3 |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| // That's it |  | ||||||
|  |  | ||||||
| // Compile implementation of Catch for use with files that do contain tests: |  | ||||||
| // - g++ -std=c++11 -Wall -I$(CATCH_ROOT) -DCATCH_EXAMPLE_RPT_1=\"include/reporters/catch_reporter_teamcity.hpp\" -o 200-Rpt-CatchMainTeamCity.o -c 200-Rpt-CatchMain.cpp |  | ||||||
| // cl -EHsc -I%CATCH_ROOT% -DCATCH_EXAMPLE_RPT_1=\"include/reporters/catch_reporter_teamcity.hpp\" -Fo200-Rpt-CatchMainTeamCity.obj -c 200-Rpt-CatchMain.cpp |  | ||||||
| @@ -1,171 +0,0 @@ | |||||||
| // 207-Rpt-TeamCityReporter.cpp |  | ||||||
|  |  | ||||||
| // Catch has built-in and external reporters: |  | ||||||
| // Built-in: |  | ||||||
| // - compact |  | ||||||
| // - console |  | ||||||
| // - junit |  | ||||||
| // - xml |  | ||||||
| // External: |  | ||||||
| // - automake |  | ||||||
| // - tap |  | ||||||
| // - teamcity (this example) |  | ||||||
|  |  | ||||||
| // main() and reporter code provided in 200-Rpt-CatchMain.cpp |  | ||||||
|  |  | ||||||
| #include <catch2/catch.hpp> |  | ||||||
|  |  | ||||||
| #ifdef _MSC_VER |  | ||||||
| # pragma warning (disable : 4702) // Disable warning: unreachable code |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| TEST_CASE( "TeamCity passes unconditionally succeeding assertion", "[teamcity]" ) { |  | ||||||
|  |  | ||||||
|     SUCCEED(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| TEST_CASE( "TeamCity reports unconditionally failing assertion", "[teamcity]" ) { |  | ||||||
|  |  | ||||||
|     FAIL(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| TEST_CASE( "TeamCity reports failing check", "[teamcity]" ) { |  | ||||||
|  |  | ||||||
|     REQUIRE( 3 == 7 ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| TEST_CASE( "TeamCity reports failing check-false", "[teamcity]" ) { |  | ||||||
|  |  | ||||||
|     REQUIRE_FALSE( 3 == 3 ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| TEST_CASE( "TeamCity reports failing check-that", "[teamcity]" ) { |  | ||||||
|  |  | ||||||
|     using namespace Catch; |  | ||||||
|  |  | ||||||
|     REQUIRE_THAT( "hello", Contains( "world" ) ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| TEST_CASE( "TeamCity reports unexpected exception", "[teamcity]" ) { |  | ||||||
|  |  | ||||||
|     REQUIRE( (throw std::runtime_error("surprise!"), true) ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| TEST_CASE( "TeamCity reports undesired exception", "[teamcity]" ) { |  | ||||||
|  |  | ||||||
|     REQUIRE_NOTHROW( (throw std::runtime_error("surprise!"), true) ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| TEST_CASE( "TeamCity reports missing expected exception", "[teamcity]" ) { |  | ||||||
|  |  | ||||||
|     REQUIRE_THROWS( true ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| TEST_CASE( "TeamCity reports missing specific expected exception", "[teamcity]" ) { |  | ||||||
|  |  | ||||||
|     REQUIRE_THROWS_AS( throw std::bad_alloc(), std::runtime_error ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| TEST_CASE( "TeamCity reports unexpected message in expected exception", "[teamcity]" ) { |  | ||||||
|  |  | ||||||
|     using namespace Catch; |  | ||||||
|  |  | ||||||
|     CHECK_THROWS_WITH( throw std::runtime_error("hello"), "world" ); |  | ||||||
|     CHECK_THROWS_WITH( throw std::runtime_error("hello"), Contains("world") ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| struct MyException: public std::runtime_error |  | ||||||
| { |  | ||||||
|     MyException( char const * text ) |  | ||||||
|     : std::runtime_error( text ) {} |  | ||||||
|      |  | ||||||
|     ~MyException() override; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| // prevent -Wweak-vtables: |  | ||||||
| MyException::~MyException() = default; |  | ||||||
|  |  | ||||||
| struct MyExceptionMatcher : Catch::MatcherBase< std::runtime_error > |  | ||||||
| { |  | ||||||
|     std::string m_text; |  | ||||||
|  |  | ||||||
|     MyExceptionMatcher( char const * text ) |  | ||||||
|     : m_text( text ) |  | ||||||
|     {} |  | ||||||
|  |  | ||||||
|     ~MyExceptionMatcher() override; |  | ||||||
|      |  | ||||||
|     bool match( std::runtime_error const & arg ) const override |  | ||||||
|     {  |  | ||||||
|         return m_text == arg.what() ;  |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     std::string describe() const override  |  | ||||||
|     {  |  | ||||||
|         return "it's me"; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| // prevent -Wweak-vtables: |  | ||||||
| MyExceptionMatcher::~MyExceptionMatcher() = default; |  | ||||||
|  |  | ||||||
| TEST_CASE( "TeamCity failing check-throws-matches", "[teamcity]" ) { |  | ||||||
|  |  | ||||||
|     CHECK_THROWS_MATCHES( throw MyException("hello"), MyException, MyExceptionMatcher("world") ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // [!throws] - lets Catch know that this test is likely to throw an exception even if successful.  |  | ||||||
| // This causes the test to be excluded when running with -e or --nothrow. |  | ||||||
|  |  | ||||||
| // No special effects for the reporter. |  | ||||||
|  |  | ||||||
| TEST_CASE( "TeamCity throwing exception with tag [!throws]", "[teamcity][!throws]" ) { |  | ||||||
|  |  | ||||||
|     REQUIRE_THROWS( throw std::runtime_error("unsurprisingly") ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // [!mayfail] - doesn't fail the test if any given assertion fails (but still reports it). This can be useful to flag a work-in-progress, or a known issue that you don't want to immediately fix but still want to track in your tests. |  | ||||||
|  |  | ||||||
| TEST_CASE( "TeamCity failing assertion with tag [!mayfail]", "[teamcity][!mayfail] " ) { |  | ||||||
|  |  | ||||||
|     REQUIRE( 3 == 7 );  // doesn't fail test case this time, reports: testIgnored |  | ||||||
|     REQUIRE( 3 == 3 ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // [!shouldfail] - like [!mayfail] but fails the test if it passes.  |  | ||||||
| // This can be useful if you want to be notified of accidental, or third-party, fixes. |  | ||||||
|  |  | ||||||
| TEST_CASE( "TeamCity succeeding assertion with tag [!shouldfail]", "[teamcity][!shouldfail]" ) { |  | ||||||
|  |  | ||||||
|     SUCCEED( "Marked [!shouldfail]" ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Compile & run: |  | ||||||
| // - g++ -std=c++11 -Wall -I$(CATCH_ROOT) -DCATCH_EXAMPLE_RPT_1=\"include/reporters/catch_reporter_teamcity.hpp\" -o 200-Rpt-CatchMainTeamCity.o -c 200-Rpt-CatchMain.cpp |  | ||||||
| // - g++ -std=c++11 -Wall -I$(CATCH_ROOT) -o 207-Rpt-TeamCityReporter 207-Rpt-TeamCityReporter.cpp 200-Rpt-CatchMainTeamCity.o && 207-Rpt-TeamCityReporter --list-reporters |  | ||||||
| // |  | ||||||
| // - cl -EHsc -I%CATCH_ROOT% -DCATCH_EXAMPLE_RPT_1=\"include/reporters/catch_reporter_teamcity.hpp\" -Fo200-Rpt-CatchMainTeamCity.obj -c 200-Rpt-CatchMain.cpp |  | ||||||
| // - cl -EHsc -I%CATCH_ROOT% 207-Rpt-TeamCityReporter.cpp 200-Rpt-CatchMainTeamCity.o && 207-Rpt-TeamCityReporter --list-reporters |  | ||||||
|  |  | ||||||
| // Compilation output (--list-reporters): |  | ||||||
| // Available reporters: |  | ||||||
| //   compact:   Reports test results on a single line, suitable for IDEs |  | ||||||
| //   console:   Reports test results as plain lines of text |  | ||||||
| //   junit:     Reports test results in an XML format that looks like Ant's |  | ||||||
| //                junitreport target |  | ||||||
| //   teamcity:  Reports test results as TeamCity service messages |  | ||||||
| //   xml:       Reports test results as an XML document |  | ||||||
|  |  | ||||||
| // Expected output (abbreviated and broken into shorter lines): |  | ||||||
| // |  | ||||||
| // prompt> 207-Rpt-TeamCityReporter.exe --reporter teamcity |  | ||||||
| // ##teamcity[testSuiteStarted name='207-Rpt-TeamCityReporter.exe'] |  | ||||||
| // ##teamcity[testStarted name='TeamCity passes unconditionally succeeding assertion'] |  | ||||||
| // ##teamcity[testFinished name='TeamCity passes unconditionally succeeding assertion' duration='1'] |  | ||||||
| // ##teamcity[testStarted name='TeamCity reports unconditionally failing assertion'] |  | ||||||
| // ##teamcity[testFailed name='TeamCity reports unconditionally failing assertion' / |  | ||||||
| // message='.../examples/207-Rpt-TeamCityReporter.cpp:23|n/ |  | ||||||
| // ...............................................................................|n|n/ |  | ||||||
| // .../examples/207-Rpt-TeamCityReporter.cpp:25|nexplicit failure'] |  | ||||||
| // ##teamcity[testFinished name='TeamCity reports unconditionally failing assertion' duration='3'] |  | ||||||
| // ... |  | ||||||
| @@ -1,44 +1,27 @@ | |||||||
| # | cmake_minimum_required( VERSION 3.5 ) | ||||||
| # Build examples. |  | ||||||
| # |  | ||||||
| # Requires CATCH_BUILD_EXAMPLES to be defined 'true', see ../CMakeLists.txt. |  | ||||||
| # |  | ||||||
|  |  | ||||||
| cmake_minimum_required( VERSION 3.0 ) | project( Catch2Examples LANGUAGES CXX ) | ||||||
|  |  | ||||||
| project( CatchExamples CXX ) |  | ||||||
|  |  | ||||||
| message( STATUS "Examples included" ) | message( STATUS "Examples included" ) | ||||||
|  |  | ||||||
| # define folders used: |  | ||||||
|  |  | ||||||
| set( EXAMPLES_DIR ${CATCH_DIR}/examples ) | # Some one-offs first: | ||||||
| set( HEADER_DIR   ${CATCH_DIR}/single_include ) | # 1) Tests and main in one file | ||||||
| set( REPORTER_HEADER_DIR ${CATCH_DIR}/include/reporters ) | add_executable( 010-TestCase | ||||||
|  |  | ||||||
| # single-file sources: |  | ||||||
|  |  | ||||||
| set( SOURCES_SINGLE_FILE |  | ||||||
|   010-TestCase.cpp |   010-TestCase.cpp | ||||||
|     231-Cfg-OutputStreams.cpp |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| # multiple-file modules: | # 2) Tests and main across two files | ||||||
|  | add_executable( 020-MultiFile | ||||||
| set( SOURCES_020 |  | ||||||
|   020-TestCase-1.cpp |   020-TestCase-1.cpp | ||||||
|   020-TestCase-2.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 | # These examples use the standard separate compilation | ||||||
|     000-CatchMain.cpp | set( SOURCES_IDIOMATIC_EXAMPLES | ||||||
| ) |  | ||||||
|  |  | ||||||
| # sources to combine with 000-CatchMain.cpp: |  | ||||||
|  |  | ||||||
| set( SOURCES_IDIOMATIC_TESTS |  | ||||||
|     030-Asn-Require-Check.cpp |     030-Asn-Require-Check.cpp | ||||||
|     100-Fix-Section.cpp |     100-Fix-Section.cpp | ||||||
|     110-Fix-ClassFixture.cpp |     110-Fix-ClassFixture.cpp | ||||||
| @@ -50,94 +33,24 @@ set( SOURCES_IDIOMATIC_TESTS | |||||||
|     311-Gen-CustomCapture.cpp |     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 ) | foreach( name ${TARGETS_IDIOMATIC_EXAMPLES} ) | ||||||
|  |     add_executable( ${name} | ||||||
| set( NAMES_REPORTERS TeamCity ) |       000-CatchMain.cpp | ||||||
|  |       ${EXAMPLES_DIR}/${name}.cpp ) | ||||||
| foreach( reporter ${NAMES_REPORTERS} ) |  | ||||||
|     list( APPEND SOURCES_SPECIFIC_REPORTERS_MAIN ${BASENAMES_REPORTERS_MAIN}${reporter}.cpp ) |  | ||||||
| endforeach() | endforeach() | ||||||
|  |  | ||||||
| # sources to combine with 200-Rpt-CatchMain{Reporter}.cpp: | set(ALL_EXAMPLE_TARGETS | ||||||
|  |   ${TARGETS_IDIOMATIC_EXAMPLES} | ||||||
| set( SOURCES_REPORTERS_TESTS |   010-TestCase | ||||||
|     207-Rpt-TeamCityReporter.cpp |   020-MultiFile | ||||||
| ) | ) | ||||||
|  |  | ||||||
| # check if all sources are listed, warn if not: | foreach( name ${ALL_EXAMPLE_TARGETS} ) | ||||||
|  |     target_link_libraries( ${name} Catch2 ) | ||||||
| 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 14) |     set_property(TARGET ${name} PROPERTY CXX_STANDARD 14) | ||||||
|     set_property(TARGET ${name} PROPERTY CXX_EXTENSIONS OFF) |     set_property(TARGET ${name} PROPERTY CXX_EXTENSIONS OFF) | ||||||
|  |  | ||||||
| @@ -154,4 +67,3 @@ foreach( name ${TARGETS_ALL} ) | |||||||
|         target_compile_options( ${name}  PRIVATE /W4 /w44265 /WX ) |         target_compile_options( ${name}  PRIVATE /W4 /w44265 /WX ) | ||||||
|     endif() |     endif() | ||||||
| endforeach() | endforeach() | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Martin Hořeňovský
					Martin Hořeňovský