代码之家  ›  专栏  ›  技术社区  ›  Typhaon

如何从fetchcontent使用jsoncpp

  •  0
  • Typhaon  · 技术社区  · 4 年前

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

    因为我不想在每台机器上手动安装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)
    

    但我试了几次,比如 <json.h> <jsoncpp/json.h> json/json.h> 但它们都不管用。我做错了什么?

    0 回复  |  直到 4 年前
        1
  •  1
  •   Tsyvarev    4 年前

    在建造过程中 jsoncpp 不提供 jsoncpp 目标 .相反,它为不同类型的库提供了不同的目标:

    • jsoncpp_static 对于静态库,
    • jsoncpp_lib 对于共享库,
    • jsoncpp_object 用于对象库。

    默认情况下,所有3种库类型都已生成,因此您可以选择 任何 其中包括:

    target_link_libraries(Programma jsoncpp_lib)
    

    此外,正确的include指令是

    #include <json/json.h>