mirror of
				https://github.com/nlohmann/json.git
				synced 2025-10-30 22:05:43 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			104 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # CMake
 | |
| 
 | |
| You can also use the `nlohmann_json::nlohmann_json` interface target in CMake.  This target populates the appropriate usage requirements for `INTERFACE_INCLUDE_DIRECTORIES` to point to the appropriate include directories and `INTERFACE_COMPILE_FEATURES` for the necessary C++11 flags.
 | |
| 
 | |
| ## External
 | |
| 
 | |
| To use this library from a CMake project, you can locate it directly with `find_package()` and use the namespaced imported target from the generated package configuration:
 | |
| 
 | |
| ```cmake
 | |
| # CMakeLists.txt
 | |
| find_package(nlohmann_json 3.2.0 REQUIRED)
 | |
| ...
 | |
| add_library(foo ...)
 | |
| ...
 | |
| target_link_libraries(foo PRIVATE nlohmann_json::nlohmann_json)
 | |
| ```
 | |
| 
 | |
| The package configuration file, `nlohmann_jsonConfig.cmake`, can be used either from an install tree or directly out of the build tree.
 | |
| 
 | |
| ## Embedded
 | |
| 
 | |
| To embed the library directly into an existing CMake project, place the entire source tree in a subdirectory and call `add_subdirectory()` in your `CMakeLists.txt` file:
 | |
| 
 | |
| ```cmake
 | |
| # Typically you don't care so much for a third party library's tests to be
 | |
| # run from your own project's code.
 | |
| set(JSON_BuildTests OFF CACHE INTERNAL "")
 | |
| 
 | |
| # If you only include this third party in PRIVATE source files, you do not
 | |
| # need to install it when your main project gets installed.
 | |
| # set(JSON_Install OFF CACHE INTERNAL "")
 | |
| 
 | |
| # Don't use include(nlohmann_json/CMakeLists.txt) since that carries with it
 | |
| # unintended consequences that will break the build.  It's generally
 | |
| # discouraged (although not necessarily well documented as such) to use
 | |
| # include(...) for pulling in other CMake projects anyways.
 | |
| add_subdirectory(nlohmann_json)
 | |
| ...
 | |
| add_library(foo ...)
 | |
| ...
 | |
| target_link_libraries(foo PRIVATE nlohmann_json::nlohmann_json)
 | |
| ```
 | |
| 
 | |
| ## Embedded (FetchContent)
 | |
| 
 | |
| Since CMake v3.11,
 | |
| [FetchContent](https://cmake.org/cmake/help/v3.11/module/FetchContent.html) can
 | |
| be used to automatically download the repository as a dependency at configure type.
 | |
| 
 | |
| Example:
 | |
| ```cmake
 | |
| include(FetchContent)
 | |
| 
 | |
| FetchContent_Declare(json
 | |
|   GIT_REPOSITORY https://github.com/nlohmann/json
 | |
|   GIT_TAG v3.7.3)
 | |
| 
 | |
| FetchContent_GetProperties(json)
 | |
| if(NOT json_POPULATED)
 | |
|   FetchContent_Populate(json)
 | |
|   add_subdirectory(${json_SOURCE_DIR} ${json_BINARY_DIR} EXCLUDE_FROM_ALL)
 | |
| endif()
 | |
| 
 | |
| target_link_libraries(foo PRIVATE nlohmann_json::nlohmann_json)
 | |
| ```
 | |
| 
 | |
| !!! Note
 | |
| 	The repository <https://github.com/nlohmann/json> download size is huge.
 | |
| 	It contains all the dataset used for the benchmarks. You might want to depend on
 | |
| 	a smaller repository. For instance, you might want to replace the URL above by
 | |
| 	<https://github.com/ArthurSonzogni/nlohmann_json_cmake_fetchcontent>.
 | |
| 
 | |
| ## Supporting Both
 | |
| 
 | |
| To allow your project to support either an externally supplied or an embedded JSON library, you can use a pattern akin to the following:
 | |
| 
 | |
| ``` cmake
 | |
| # Top level CMakeLists.txt
 | |
| project(FOO)
 | |
| ...
 | |
| option(FOO_USE_EXTERNAL_JSON "Use an external JSON library" OFF)
 | |
| ...
 | |
| add_subdirectory(thirdparty)
 | |
| ...
 | |
| add_library(foo ...)
 | |
| ...
 | |
| # Note that the namespaced target will always be available regardless of the
 | |
| # import method
 | |
| target_link_libraries(foo PRIVATE nlohmann_json::nlohmann_json)
 | |
| ```
 | |
| ```cmake
 | |
| # thirdparty/CMakeLists.txt
 | |
| ...
 | |
| if(FOO_USE_EXTERNAL_JSON)
 | |
|   find_package(nlohmann_json 3.2.0 REQUIRED)
 | |
| else()
 | |
|   set(JSON_BuildTests OFF CACHE INTERNAL "")
 | |
|   add_subdirectory(nlohmann_json)
 | |
| endif()
 | |
| ...
 | |
| ```
 | |
| 
 | |
| `thirdparty/nlohmann_json` is then a complete copy of this source tree.
 |