如何从fetchcontent使用jsoncpp

问题描述

我正在编写一个程序,该程序基本上是对几个不同机器的压力测试,并且我必须将测试结果写入jsonformat。

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

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)

但是我尝试了几个标头包含,例如<json.h> <jsoncpp/json.h> json/json.h>,但是它们都不起作用。我在做什么错了?

解决方法

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

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

默认情况下,所有3种库均已构建,因此您可以选择其中的任何链接:

target_link_libraries(Programma jsoncpp_lib)

此外,正确的include指令是

#include <json/json.h>