mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-20 12:26:10 +01:00
Add the static library Catch2WithMain
It should provide a shared impl for all targets that need to link against Catch2's implementation. However, due to limitations of C++ linking and Catch2's v2 implementation, this is only experimental and might not work under some circumstances.
This commit is contained in:
parent
dc7e705672
commit
92f8b01dfa
@ -103,6 +103,12 @@ endif()
|
|||||||
# provide a namespaced alias for clients to 'link' against if catch is included as a sub-project
|
# provide a namespaced alias for clients to 'link' against if catch is included as a sub-project
|
||||||
add_library(Catch2::Catch2 ALIAS Catch2)
|
add_library(Catch2::Catch2 ALIAS Catch2)
|
||||||
|
|
||||||
|
# Hacky support for compiling the impl into a static lib
|
||||||
|
add_library(Catch2WithMain src/catch_with_main.cpp)
|
||||||
|
target_link_libraries(Catch2WithMain PUBLIC Catch2)
|
||||||
|
add_library(Catch2::Catch2WithMain ALIAS Catch2WithMain)
|
||||||
|
|
||||||
|
|
||||||
# Only perform the installation steps when Catch is not being used as
|
# Only perform the installation steps when Catch is not being used as
|
||||||
# a subproject via `add_subdirectory`, or the destinations will break,
|
# a subproject via `add_subdirectory`, or the destinations will break,
|
||||||
# see https://github.com/catchorg/Catch2/issues/1373
|
# see https://github.com/catchorg/Catch2/issues/1373
|
||||||
@ -121,7 +127,7 @@ if (NOT_SUBPROJECT)
|
|||||||
# create and install an export set for catch target as Catch2::Catch
|
# create and install an export set for catch target as Catch2::Catch
|
||||||
install(
|
install(
|
||||||
TARGETS
|
TARGETS
|
||||||
Catch2
|
Catch2 Catch2WithMain
|
||||||
EXPORT
|
EXPORT
|
||||||
Catch2Targets
|
Catch2Targets
|
||||||
DESTINATION
|
DESTINATION
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
[Short answer](#short-answer)<br>
|
[Short answer](#short-answer)<br>
|
||||||
[Long answer](#long-answer)<br>
|
[Long answer](#long-answer)<br>
|
||||||
[Practical example](#practical-example)<br>
|
[Practical example](#practical-example)<br>
|
||||||
|
[Using the static library Catch2WithMain](#using-the-static-library-catch2withmain)<br>
|
||||||
[Other possible solutions](#other-possible-solutions)<br>
|
[Other possible solutions](#other-possible-solutions)<br>
|
||||||
|
|
||||||
Several people have reported that test code written with Catch takes much longer to compile than they would expect. Why is that?
|
Several people have reported that test code written with Catch takes much longer to compile than they would expect. Why is that?
|
||||||
@ -64,6 +65,24 @@ tests-factorial.cpp:11: failed: Factorial(0) == 1 for: 0 == 1
|
|||||||
Failed 1 test case, failed 1 assertion.
|
Failed 1 test case, failed 1 assertion.
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Using the static library Catch2WithMain
|
||||||
|
|
||||||
|
Catch2 also provides a static library that implements the runner. Note
|
||||||
|
that this support is experimental, due to interactions between Catch2 v2
|
||||||
|
implementation and C++ linking limitations.
|
||||||
|
|
||||||
|
As with the `Catch2` target, the `Catch2WithMain` CMake target can be used
|
||||||
|
either from a subdirectory, or from installed build.
|
||||||
|
|
||||||
|
### CMake
|
||||||
|
```cmake
|
||||||
|
add_executable(tests-factorial tests-factorial.cpp)
|
||||||
|
|
||||||
|
target_link_libraries(tests-factorial Catch2::Catch2WithMain)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Other possible solutions
|
## Other possible solutions
|
||||||
You can also opt to sacrifice some features in order to speed-up Catch's compilation times. For details see the [documentation on Catch's compile-time configuration](configuration.md#other-toggles).
|
You can also opt to sacrifice some features in order to speed-up Catch's compilation times. For details see the [documentation on Catch's compile-time configuration](configuration.md#other-toggles).
|
||||||
|
|
||||||
|
2
src/catch_with_main.cpp
Normal file
2
src/catch_with_main.cpp
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#define CATCH_CONFIG_MAIN
|
||||||
|
#include <catch2/catch.hpp>
|
Loading…
Reference in New Issue
Block a user