C++ - fetchcontent から jsoncpp を使用する方法

okwaves2024-01-25  8

私は基本的にいくつかの異なるマシンに対するストレステストである 1 つのプログラムを作成しており、テスト結果を 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)

しかし、<json.h> のようなヘッダー インクルードをいくつか試してみました。 <jsoncpp/json.h> json/json.h>しかし、どれも機能しません。私の何が間違っているのでしょうか?

1

ライブラリ (または実行可能ファイル) が jsoncpp ライブラリのヘッダーを使用している場合、そのライブラリにリンクする必要はありません。コード内にそのリンク (target_link_libraries で実行される) が見当たりません。

– ツィヴァレフ

2020 年 9 月 3 日 10:39

1

使用する jsoncpp ライブラリの種類 (STATIC、SHARED、または OBJECT) に応じて、ターゲットの名前は、それぞれ jsoncpp_static、jsoncpp_lib、および jsoncpp_object になります。

– ツィヴァレフ

2020 年 9 月 3 日 10:56

1

@Tsyvarev実際にはそれが答えです。したがって、正しいインクルード ディレクティブは #include <json/json.h> である必要があります。

– pptaszni

2020 年 9 月 3 日 11:08

2

受け取った正確なエラー メッセージを質問の投稿に追加してください。このエラー メッセージには、それに関係するファイルへのパスが含まれている必要があります。

– ツィヴァレフ

2020 年 9 月 3 日 11:22

1

問題を解決した場合は、他の閲覧者がそこから学べるように、問題を解決するために変更した内容を説明 (およびコードを表示) した回答投稿を作成してください。

– ケビン

2020 年 9 月 3 日 12:17



------------------------

ビルド中、プロジェクト jsoncpp は jsoncpp ターゲットを提供しません。代わりに、異なる種類のライブラリに対して個別のターゲットが提供されます。

STATIC ライブラリの場合は jsoncpp_static、 共有ライブラリの場合は jsoncpp_lib 、 OBJECT ライブラリの jsoncpp_object。

デフォルトでは、3 種類のライブラリがすべてビルドされるため、いずれかを選択できます。そのうちのいずれかにリンクしてください:

target_link_libraries(Programma jsoncpp_lib)

また、正しい include ディレクティブは次のとおりです

#include <json/json.h>

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。