Files
kaizen/docs/mkdocs/docs/integration/cmake.md
Simone a28dbbf733 Squashed 'external/json/' changes from 9cca280a4..60c48755e
60c48755e Add missing macros in README and link to docs for more info (#4582)
a6255cc41 add a ci step for Json_Diagnostic_Positions (#4579)
f038ac4c9 Enable modernize-use-integer-sign-comparison check (#4581)
4f64d8d0b Modernize integer comparison (#4577)
2134cb947 Fix NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT with an empty JSON instance (#4508)
6057b31df Overwork astyle call (#4573)
0fa326a8e Use Clang image to run iwyu (#4574)
8314ac2f7 Use ubuntu-latest image to run Valgrind (#4575)
69c8758d5 fix the abi tests for diagnostics positions feature (#4572)
5ff90d9e0 fix diagnostic positions related compilation errors (#4570)
6be4e8560 Bump cppcheck from 1.4.6 to 1.4.7 in /cmake/requirements (#4567)
663058e7d Fix typo in nlohmann_define_derived_type.md (#4565)
af4ad7915 Add ONLY_SERIALIZE for NLOHMANN_DEFINE_DERIVED_TYPE_* macros (#4562)
58f5f2596 json start/end position implementation (#4517)
733c59588 Bump actions/upload-artifact from 4.4.3 to 4.5.0 (#4557)
6cb099e30 Suppress modernize-use-integer-sign-comparison (#4558)
094bd2651 Set parents after insert call (#4537)
30cd44df9 Clean up CI (#4553)
5362012fd [StepSecurity] ci: Harden GitHub Actions (#4551)
861ec9c3c Fix token permissions warnings (#4550)
f4910b20c Bump mkdocs-material from 9.5.48 to 9.5.49 in /docs/mkdocs (#4548)
f2a4ac067 Add step to build the documentation (#4549)
8e1b80001 Move reuse dependency to requirements.txt file (#4547)
677e19e39 Clean up  (#4546)
9e23b5d61 ⬆️ Bump watchdog from 2.1.7 to 6.0.0 in /tools/serve_header (#4542)
eb142e33c ⬆️ Bump ossf/scorecard-action from 2.3.3 to 2.4.0 (#4545)
1c8e26dcb ⬆️ Bump lukka/get-cmake from 3.31.0 to 3.31.2 (#4544)
b6b8378c8 ⬆️ Bump github/codeql-action from 2.27.9 to 3.27.9 (#4543)
58949c0ad ⬆️ Bump actions/github-script from 6.4.0 to 7.0.1 (#4540)
7cfbe321b ⬆️ Bump pyyaml from 6.0 to 6.0.2 in /tools/serve_header (#4541)
4003f8da0 [StepSecurity] Apply security best practices (#4539)
6a2ae22a5 📝 add OpenSSF Scorecard badge
620034ece ♻️ allow patch and diff to be used with arbitrary string types (#4536)
e6cafa573 📝 fix CPM.cmake example
e0a17f847 📝 add more package managers (#4533)
20ae363a7 Replace EOF with char_traits (#4532)
589641b17 Add support of multi-dim C-style array member of struct. (#4262)
f385fe28f 💸 update sponsors
981a4c39f 📝 trigger documentation build
dd81f878f 🚀 fix permissions
549c79ba7 Overwork documentation (#4516)
9f60e8555 Fix return value of get_ptr for unsigned integers (#4525)
a006a7a48 Add more GCC warning flags (#4524)
1b9a9d1f2 Update licenses (#4521)
935c6eeb5 Optimize binary `get_number` implementation by reading multiple bytes at once (#4391)
e41905fcb 💸 thanks @phrrngtn
d333f0895 CMake: generate a pkg-config file that follow pkg-config conventions (#4456)
3d6c664de Allow comparing default initialized iterators (#4512)
ee32bfc1c Make SAX output locale-independent (#4505)
a97041a98 Skip enum tests when JSON_DisableEnumSerialization=ON (#4504)
f9f8c0779 fix: integer parsed as float when EINTR set in errno (#4506)
378e09179 Fix weak-vtables warning (#4500)
1f218e107 Possible fix for #4485 (#4487)
64f68dc56 Suppress warnings in NLOHMANN_JSON_SERIALIZE_ENUM (#4497)
1c5923e5d Add comment for #4494 (#4496)
e3ac5a64b Add test for libstdc++ (#4495)
e509007df Remove alwayslink=True Bazel flag (#4396)
060414037 feat: Rebase `feature/optional` to `develop` (#4036)
fd20975a9 Add CPack support (#4459)
fde9a86c5 Make iterator_proxy_value a forward_iterator (#4371) (#4372)
1825117e6 Another desperate try to fix the CI (#4489)
4a602df34 Add lgtm explanation (#4362)
18ff442e6 Allow overriding the CMake target name (#4483)
aff5a31d3 Add NLOHMANN_DEFINE_DERIVED_TYPE_* macros (#4033)
ac8b22180 Update CONTRIBUTING.md (#4486)
632583977 Update is_structured.md (#4472)
b36f4c477 Update natvis to reflect 3.11.3 and the current structure of basic_json (#4451)
960b763ec Docs: fix typos of 'whether' in `operator_{gt,le,lt}.md` (#4412)
8c391e04f Docs: Fix wrong code usage in the Value access section of `json_pointer.md` (#4255)
01da82eae Fix gdb pretty printer (#4343)
97f0bdaf9 chore: fix some typos in comments (#4345)
c883fb0f1 Fix for incorrect function name in documentation example (#4342)
377c767aa Updated exception handling to catch const reference in out_of_range (#4331)
16b3d841d Fixed an error in the `Custom data source` example. (#4335)
199dea11b #4307 Updated docx to 3.10.5 from 3.10.4 (#4310)
0457de21c Align astyle flags in Makefile with CI (#4277)
c35d260c2 Suppress Clang-Tidy warnings (#4276)
6a064e026 Remove broken link from CONTRIBUTING.md (#4274)
7efe87549 Update json_has_static_rtti.md (#4269)
a259ecc51 Fix `to_json` for enums when the enum has an unsigned underlying type. (#4237)
3780b41dd 💰 update sponsors

git-subtree-dir: external/json
git-subtree-split: 60c48755e3f717eace7830d7bbc0d8f1a5e0cc8a
2025-01-07 15:12:10 +00:00

6.3 KiB

CMake

Integration

You can 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:

!!! example

```cmake title="CMakeLists.txt"
cmake_minimum_required(VERSION 3.1)
project(ExampleProject LANGUAGES CXX)

find_package(nlohmann_json 3.11.3 REQUIRED)

add_executable(example example.cpp)
target_link_libraries(example 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.

!!! example

```cmake title="CMakeLists.txt"
cmake_minimum_required(VERSION 3.1)
project(ExampleProject LANGUAGES CXX)

# 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 "")

add_subdirectory(nlohmann_json)

add_executable(example example.cpp)
target_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)
```

!!! note

Do not use `#!cmake include(nlohmann_json/CMakeLists.txt)`, since that carries with it unintended consequences that
will break the build. It is generally discouraged (although not necessarily well documented as such) to use
`#!cmake include(...)` for pulling in other CMake projects anyways.

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.

!!! example

```cmake title="CMakeLists.txt"
project(ExampleProject LANGUAGES CXX)

option(EXAMPLE_USE_EXTERNAL_JSON "Use an external JSON library" OFF)

add_subdirectory(thirdparty)

add_executable(example example.cpp)

# Note that the namespaced target will always be available regardless of the import method
target_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)
```

```cmake title="thirdparty/CMakeLists.txt"
if(EXAMPLE_USE_EXTERNAL_JSON)
    find_package(nlohmann_json 3.11.3 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.

FetchContent

Since CMake v3.11, FetchContent can be used to automatically download a release as a dependency at configure type.

!!! example

```cmake title="CMakeLists.txt"
cmake_minimum_required(VERSION 3.11)
project(ExampleProject LANGUAGES CXX)

include(FetchContent)

FetchContent_Declare(json URL https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz)
FetchContent_MakeAvailable(json)

add_executable(example example.cpp)
target_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)
```

!!! Note

It is recommended to use the URL approach described above which is supported as of version 3.10.0. It is also
possible to pass the Git repository like

```cmake
FetchContent_Declare(json
    GIT_REPOSITORY https://github.com/nlohmann/json
    GIT_TAG v3.11.3
)
```

However, the repository <https://github.com/nlohmann/json> download size is quite large.

CMake Options

JSON_BuildTests

Build the unit tests when BUILD_TESTING is enabled. This option is ON by default if the library's CMake project is the top project. That is, when integrating the library as described above, the test suite is not built unless explicitly switched on with this option.

JSON_CI

Enable CI build targets. The exact targets are used during the several CI steps and are subject to change without notice. This option is OFF by default.

JSON_Diagnostics

Enable extended diagnostic messages by defining macro JSON_DIAGNOSTICS. This option is OFF by default.

JSON_Diagnostic_Positions

Enable position diagnostics by defining macro JSON_DIAGNOSTIC_POSITIONS. This option is off by default.

JSON_DisableEnumSerialization

Disable default enum serialization by defining the macro JSON_DISABLE_ENUM_SERIALIZATION. This option is OFF by default.

JSON_FastTests

Skip expensive/slow test suites. This option is OFF by default. Depends on JSON_BuildTests.

JSON_GlobalUDLs

Place user-defined string literals in the global namespace by defining the macro JSON_USE_GLOBAL_UDLS. This option is OFF by default.

JSON_ImplicitConversions

Enable implicit conversions by defining macro JSON_USE_IMPLICIT_CONVERSIONS. This option is ON by default.

JSON_Install

Install CMake targets during install step. This option is ON by default if the library's CMake project is the top project.

JSON_MultipleHeaders

Use non-amalgamated version of the library. This option is OFF by default.

JSON_SystemInclude

Treat the library headers like system headers (i.e., adding SYSTEM to the target_include_directories call) to checks for this library by tools like Clang-Tidy. This option is OFF by default.

JSON_Valgrind

Execute test suite with Valgrind. This option is OFF by default. Depends on JSON_BuildTests.