Initial prototype of PCH support

Related to #1061
This commit is contained in:
Martin Hořeňovský 2017-11-14 21:04:36 +01:00
parent 98d4c49d1c
commit 9796a77a37
2 changed files with 24 additions and 0 deletions

View File

@ -55,6 +55,17 @@ Because of the incremental nature of Catch's test suites and ability to run spec
## Low-level tools ## Low-level tools
### Precompiled headers (PCHs)
Catch offers prototypal support for being included in precompiled headers, but because of its single-header nature it does need some actions by the user:
* The precompiled header needs to define `CATCH_CONFIG_ALL_PARTS`
* The implementation file needs to
* undefine `TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED`
* define `CATCH_CONFIG_IMPL_ONLY`
* define `CATCH_CONFIG_MAIN` or `CATCH_CONFIG_RUNNER`
* include "catch.hpp" again
### CMake ### CMake
In general we recommend "vendoring" Catch's single-include releases inside your own repository. If you do this, the following example shows a minimal CMake project: In general we recommend "vendoring" Catch's single-include releases inside your own repository. If you do this, the following example shows a minimal CMake project:

View File

@ -9,6 +9,7 @@
#ifndef TWOBLUECUBES_CATCH_HPP_INCLUDED #ifndef TWOBLUECUBES_CATCH_HPP_INCLUDED
#define TWOBLUECUBES_CATCH_HPP_INCLUDED #define TWOBLUECUBES_CATCH_HPP_INCLUDED
#ifdef __clang__ #ifdef __clang__
# pragma clang system_header # pragma clang system_header
#elif defined __GNUC__ #elif defined __GNUC__
@ -19,12 +20,19 @@
#if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER) #if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER)
# define CATCH_IMPL # define CATCH_IMPL
# define CATCH_CONFIG_ALL_PARTS
#endif
// In the impl file, we want to have access to all parts of the headers
// Can also be used to sanely support PCHs
#if defined(CATCH_CONFIG_ALL_PARTS)
# define CATCH_CONFIG_EXTERNAL_INTERFACES # define CATCH_CONFIG_EXTERNAL_INTERFACES
# if defined(CATCH_CONFIG_DISABLE_MATCHERS) # if defined(CATCH_CONFIG_DISABLE_MATCHERS)
# undef CATCH_CONFIG_DISABLE_MATCHERS # undef CATCH_CONFIG_DISABLE_MATCHERS
# endif # endif
#endif #endif
#if !defined(CATCH_CONFIG_IMPL_ONLY)
#include "internal/catch_platform.h" #include "internal/catch_platform.h"
#ifdef CATCH_IMPL #ifdef CATCH_IMPL
@ -61,6 +69,8 @@
#include "internal/catch_external_interfaces.h" #include "internal/catch_external_interfaces.h"
#endif #endif
#endif // ! CATCH_CONFIG_IMPL_ONLY
#ifdef CATCH_IMPL #ifdef CATCH_IMPL
#include "internal/catch_impl.hpp" #include "internal/catch_impl.hpp"
#endif #endif
@ -69,6 +79,7 @@
#include "internal/catch_default_main.hpp" #include "internal/catch_default_main.hpp"
#endif #endif
#if !defined(CATCH_CONFIG_IMPL_ONLY)
#ifdef CLARA_CONFIG_MAIN_NOT_DEFINED #ifdef CLARA_CONFIG_MAIN_NOT_DEFINED
# undef CLARA_CONFIG_MAIN # undef CLARA_CONFIG_MAIN
@ -327,6 +338,8 @@ using Catch::Detail::Approx;
#endif #endif
#endif // ! CATCH_CONFIG_IMPL_ONLY
#include "internal/catch_reenable_warnings.h" #include "internal/catch_reenable_warnings.h"
#endif // TWOBLUECUBES_CATCH_HPP_INCLUDED #endif // TWOBLUECUBES_CATCH_HPP_INCLUDED