如何从 fetchcontent 使用 jsoncpp

How to use jsoncpp from fetchcontent

我正在制作一个程序,基本上是对几台不同机器的压力测试,我必须将测试结果写入 json 格式。

因为我不想在每台机器上手动安装 jsoncpp,所以我决定在 CMakeLists 文件中使用 Fetchcontent:

cmake_minimum_required(VERSION 3.15)
project(Programma)

include(FetchContent)

FetchContent_Declare(
        jsoncpp
        GIT_REPOSITORY https://github.com/open-source-parsers/jsoncpp.git
        GIT_TAG        master
)

FetchContent_GetProperties(jsoncpp)
if (NOT jsoncpp_POPULATED)
    FetchContent_Populate(jsoncpp)
    add_subdirectory(${jsoncpp_SOURCE_DIR} ${jsoncpp_BINARY_DIR})
    message(${jsoncpp_SOURCE_DIR})
    message(${jsoncpp_BINARY_DIR})
endif ()

#FetchContent_MakeAvailable(jsoncpp)

set(CMAKE_CXX_STANDARD 17)

add_executable(Programma main.cpp)
add_library(TestSubjects.cpp TransformTests.cpp FoldTests.cpp
        TestResults.h SortTests.cpp FindTests.cpp)

target_link_libraries(Programma Tests jsoncpp)

但我尝试了几个 header 包括 <json.h> <jsoncpp/json.h> json/json.h> 但其中 none 有效。我做错了什么?

在构建过程中,项目 jsoncpp 未提供 jsoncpp 目标 。相反,它为不同类型的库提供单独的目标:

  • jsoncpp_static 对于 STATIC 库,
  • jsoncpp_lib 共享库,
  • jsoncpp_object 对象库。

默认情况下,所有 3 种库类型都已构建,因此您可以为 link 选择其中的 任何,其中:

target_link_libraries(Programma jsoncpp_lib)

此外,正确的包含指令是

#include <json/json.h>