mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 05:59:32 +01:00 
			
		
		
		
	Export Catch as a CMake package and 'linkable' target
Create a namespaced Catch2::Catch target that is 'linkable' through
`target_link_libraries()` and export it so it is findable through
`find_package()`.
`find_package()` will find versions with the same major number and with
minor number >= requested.
This makes catch a lot easier to use in CMake-based projects. Whether it
is found using `find_package` or included in the client project as a
subdirectory, the client can include the catch headers per-target with
`target_include_directories(target PRIVATE Catch2::Catch).
Example usage:
    cmake_minimum_required(VERSION 3.1)
    # include Catch2 as subdirectory or installed package
    # add_subdirectory(Catch2)
    find_package(Catch2 VERSION 2.1.0 REQUIRED)
    add_executable(tests tests/catch_main.cpp)
    target_link_libraries(tests PRIVATE Catch2::Catch)
			
			
This commit is contained in:
		
				
					committed by
					
						
						Martin Hořeňovský
					
				
			
			
				
	
			
			
			
						parent
						
							ba6d33fb8c
						
					
				
				
					commit
					39bfc6e82b
				
			@@ -1,4 +1,4 @@
 | 
				
			|||||||
cmake_minimum_required(VERSION 3.0)
 | 
					cmake_minimum_required(VERSION 3.1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# detect if Catch is being bundled,
 | 
					# detect if Catch is being bundled,
 | 
				
			||||||
# disable testsuite in that case
 | 
					# disable testsuite in that case
 | 
				
			||||||
@@ -405,3 +405,37 @@ if(NOT WIN32 OR NOT CMAKE_HOST_SYSTEM_NAME MATCHES Windows)
 | 
				
			|||||||
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/catch.pc DESTINATION ${PKGCONFIG_INSTALL_DIR})
 | 
					    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/catch.pc DESTINATION ${PKGCONFIG_INSTALL_DIR})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# add catch as a 'linkable' target
 | 
				
			||||||
 | 
					add_library(Catch INTERFACE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# depend on some obvious c++11 features so the dependency is transitively added dependants
 | 
				
			||||||
 | 
					target_compile_features(Catch INTERFACE cxx_auto_type cxx_constexpr cxx_noexcept)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					target_include_directories(Catch
 | 
				
			||||||
 | 
						INTERFACE
 | 
				
			||||||
 | 
							$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/single_include>
 | 
				
			||||||
 | 
							$<INSTALL_INTERFACE:include/catch>
 | 
				
			||||||
 | 
							$<INSTALL_INTERFACE:include>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# provide a namespaced alias for clients to 'link' against if catch is included as a sub-project
 | 
				
			||||||
 | 
					add_library(Catch2::Catch ALIAS Catch)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set(CATCH_CMAKE_CONFIG_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Catch2")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# create and install an export set for catch target as Catch2::Catch
 | 
				
			||||||
 | 
					install(TARGETS Catch EXPORT Catch2Config DESTINATION ${CMAKE_INSTALL_LIBDIR})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install(EXPORT Catch2Config
 | 
				
			||||||
 | 
						NAMESPACE Catch2::
 | 
				
			||||||
 | 
						DESTINATION ${CATCH_CMAKE_CONFIG_DESTINATION})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# install Catch2ConfigVersion.cmake file to handle versions in find_package
 | 
				
			||||||
 | 
					include(CMakePackageConfigHelpers)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					write_basic_package_version_file(Catch2ConfigVersion.cmake
 | 
				
			||||||
 | 
						COMPATIBILITY SameMajorVersion)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install(FILES
 | 
				
			||||||
 | 
						"${CMAKE_BINARY_DIR}/Catch2ConfigVersion.cmake"
 | 
				
			||||||
 | 
						DESTINATION ${CATCH_CMAKE_CONFIG_DESTINATION})
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user