日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux下CMAKE编译jsoncpp,c – 如何为jsoncpp编写cmake模块?

發布時間:2023/12/10 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux下CMAKE编译jsoncpp,c – 如何为jsoncpp编写cmake模块? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我想使用jsoncpp編寫C代碼以解析

JSON文件.讓我解釋一下我做了什么.我創建了一個CMakeLists.txt,我創建了一個FindJsoncpp.cmake以及一個簡單的c文件來測試jsoncpp.當我使用-I /usr/include / jsoncpp / -ljsoncpp編譯沒有cmake的C源時,它工作正常.但是當我嘗試使用cmake構建它時,它找不到我在c源代碼中包含的json.h頭文件.

這是我的CMakeLists.txt:

cmake_minimum_required (VERSION 2.6)

project (Parser)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")

include(LibFindMacros)

message("----------- trying to find Jsoncpp-------------")

find_package(Jsoncpp)

if(Jsoncpp_FOUND)

message("INFO: we found LibJsoncpp on your pc.")

message(Jsoncpp_FOUND = ${Jsoncpp_FOUND})

message(Jsoncpp_INCLUDE_DIR = ${Jsoncpp_INCLUDE_DIR})

message(Jsoncpp_LIBRARY = ${Jsoncpp_LIBRARY})

else(Jsoncpp_FOUND)

message("WARNING: we couldn't find LibJsoncpp on your pc. DLC is disabled.")

endif(Jsoncpp_FOUND)

#set(LIBS ${Jsoncpp_LIBRARY})

# Set the include dir variables and the libraries and let libfind_process do the rest.

# NOTE: Singular variables for this library, plural for libraries this this lib depends on.

set(Jsoncpp_PROCESS_INCLUDES Jsoncpp_INCLUDE_DIR)

set(Jsoncpp_PROCESS_LIBS Jsoncpp_LIBRARY)

# add the executable

add_executable(jsonparser jsonparser.cpp)

這是我寫的FindJsoncpp.cmake:

# - Try to find Jsoncpp

# Once done, this will define

#

# Jsoncpp_FOUND - system has Jsoncpp

# Jsoncpp_INCLUDE_DIRS - the Jsoncpp include directories

# Jsoncpp_LIBRARIES - link these to use Jsoncpp

include(LibFindMacros)

# Use pkg-config to get hints about paths

libfind_pkg_check_modules(Jsoncpp_PKGCONF jsoncpp)

# Include dir

find_path(Jsoncpp_INCLUDE_DIR

NAMES json/json.h

# PATHS ./jsoncpp/

PATHS ${Jsoncpp_PKGCONF_INCLUDE_DIRS} # /usr/include/jsoncpp/json

)

# Finally the library itself

find_library(Jsoncpp_LIBRARY

NAMES jsoncpp

PATHS ${Jsoncpp_PKGCONF_LIBRARY_DIRS}

# PATH ./jsoncpp/

)

set(Jsoncpp_PROCESS_INCLUDES Jsoncpp_INCLUDE_DIR)

set(Jsoncpp_PROCESS_LIBS Jsoncpp_LIBRARY)

libfind_process(Jsoncpp)

最后一個名為jsonparser.cpp的簡單C代碼來測試它:

#include

#include

#include

using namespace std;

void printSongInfo(Json::Value song){

std::clog<

std::clog<

std::clog<

}

int main(){

std::ifstream catalogFile("catalog.json");

Json::Value root; // will contains the root value after parsing.

Json::Reader reader;

bool parsingSuccessful = reader.parse( catalogFile, root );

if ( !parsingSuccessful ){

// report to the user the failure and their locations in the document.

std::cout << "Failed to parse configuration\n"

<< reader.getFormattedErrorMessages();

return 1;

}

//parsing songs

const Json::Value songs = root["songs"];

for ( int index = 0; index < songs.size(); ++index ){ // Iterates over the sequence elements.

printSongInfo(songs[index] );

}

return 0;

}

當我用下面的命令運行jsonparser.cpp時它工作得很好.

g++ -I/usr/include/jsoncpp/ -ljsoncpp jsonparser.cpp

但是當我嘗試使用cmake時,我得到了這個錯誤:

$~/jsoncppTest/build$cmake ..

-- The C compiler identification is GNU 4.7.3

-- The CXX compiler identification is GNU 4.7.3

-- Check for working C compiler: /usr/bin/cc

-- Check for working C compiler: /usr/bin/cc -- works

-- Detecting C compiler ABI info

-- Detecting C compiler ABI info - done

-- Check for working CXX compiler: /usr/bin/c++

-- Check for working CXX compiler: /usr/bin/c++ -- works

-- Detecting CXX compiler ABI info

-- Detecting CXX compiler ABI info - done

----------- trying to find Jsoncpp-------------

-- Found PkgConfig: /usr/bin/pkg-config (found version "0.26")

-- checking for module 'jsoncpp'

-- found jsoncpp, version 0.6.0

-- Found Jsoncpp

INFO: we found LibJsoncpp on your pc.

Jsoncpp_FOUND=TRUE

Jsoncpp_INCLUDE_DIR=/usr/include/jsoncpp

Jsoncpp_LIBRARY=/usr/lib/libjsoncpp.so

-- Configuring done

-- Generating done

-- Build files have been written to: ~/jsoncppTest/build

$~/jsoncppTest/build$make

Scanning dependencies of target jsonparser

[100%] Building CXX object CMakeFiles/jsonparser.dir/jsonparser.cpp.o

~/jsoncppTest/jsonparser.cpp:3:23: fatal error: json/json.h: No such file or directory

compilation terminated.

make[2]: *** [CMakeFiles/jsonparser.dir/jsonparser.cpp.o] Error 1

make[1]: *** [CMakeFiles/jsonparser.dir/all] Error 2

make: *** [all] Error 2

它找不到json / json.h頭文件,但它之前在cmake中創建了jsoncpp庫.我檢查了jsoncpp.pc文件,發現了確定.我不知道我做錯了什么!任何幫助,將不勝感激.

我正在使用ubuntu 13.04和multiarch支持.我聽說過有關64位編譯器的jsoncpp問題,但不知道是不是這樣.

總結

以上是生活随笔為你收集整理的Linux下CMAKE编译jsoncpp,c – 如何为jsoncpp编写cmake模块?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。