问题描述
我正在编写一个程序,该程序基本上是对几个不同机器的压力测试,并且我必须将测试结果写入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>