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问题,但不知道是不是这样.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(1438):vue三种安装方式

1. 直接下载源码然后通过路径引入- 开发版本&#xff1a;https://vuejs.org/js/vue.js- 生产版本&#xff1a;https://vuejs.org/js/vue.min.js2. CDNjs <script src"https://cdn.jsdelivr.net/npm/vue2.5.16/dist/vue.js"></script> 3. 使用 npm 下载&…

三星s7共享网络给linux,三星Galaxy S7WiFi状态下可以共享wifi热点吗【详解】

目前&#xff0c;越来越多的智能手机都具有wifi热点的功能&#xff0c;不仅方便了不少网友之间的网络流量共享&#xff0c;而且一个wifi热点还可以共享到多个设备。而三星最新款手机三星Galaxy S7与S7 Edge在wifi热点功能的基础上&#xff0c;将wifi热点功能进行的升华&#xf…

文件处理封装

/// <summary>/// 文件处理封装/// </summary> public static class FileHelper{/// <summary>/// 读取Txt文件/// </summary>/// <param name"FilePath">文件地址</param>/// <returns>文件内容</returns>public s…

前端学习(1439):vue的helloworld

#### 2.2 HelloWorld> 作用:将数据应用在html页面中1. body中,设置Vue管理的视图<div id"app"></div>2. 引入vue.js3. 实例化Vue对象 new Vue();4. 设置Vue实例的选项:如el、data... new Vue({选项:值});5. 在<div idapp></div>中通过…

解决空值的策略

使用Option<T>类型二不是null是解决空值问题的另一种策略。与null相比&#xff0c;Option<T>类型是一个更安全的方法&#xff0c;因为它同样适用于值类型和引用类型。而且它的功能更强大&#xff0c;因为它用“元数据”的方法保存一个值的额外信息&#xff0c;因此…

linux c 内存分配内存,Linuxc - 操作系统内存分配

静态变量是存储在数据段的&#xff0c;在函数中可以共用。全局变量也是存储在数据段的&#xff0c;在全局中可以共用。指针变量本质上是地址&#xff0c;数组变量本质上也是地址。数组是可靠的&#xff0c;不可变的地址。指针变量是不可靠的&#xff0c;可变的。数组本质上是指…

管理linux中文件共享,Linux操作系统文件管理器的共享

在目前最流行的RedHatLinux 9.0中有GNOME和KDE这两个图形桌面。这两个桌面系统中分别有两个不同的文件管理器&#xff1a;在GNOME中是Nautilus(鹦鹉螺)而KDE中是Konqueror&#xff0c;各有不少很实用的特色。其实不管你登录哪个桌面都可以同时使用这两个文件管理器&#xff0c;…

mysql区分大小写搜索

form:http://www.uphtm.com/database/257.html 在默认情况下&#xff0c;MySQL搜索不区分大小写&#xff08;但某些字符集始终区分大小写&#xff0c;如czech&#xff09;。这意味着&#xff0c;如果你使用col_name LIKE a%进行搜索&#xff0c;你将获得以A或a开始的所有列。如…

dos安装深度linux,U盘用grub4dos引导Deepin v20 Beta iso安装的方法

下面为你带来U盘grub4dos引导和linux系统硬盘引导Deepin Linux镜像的方法&#xff0c;可适用在Deepin v20 Beta iso上&#xff0c;亲测可成功安装Deepin v20 Beta iso镜像到硬盘。下载Deepin v20 Beta iso请看&#xff1a;深度操作系统Deepin 20 Beta版本发布ISO下载。一、U盘引…

从内存中加载DLL Delphi版(转)

源&#xff1a;从内存中加载DLL DELPHI版 原文 &#xff1a; http://www.2ccc.com/article.asp?articleid5784 MemLibrary.pas //从内存中加载DLL DELPHI版 unit MemLibrary;interfaceuses Windows;function memLoadLibrary(pLib: Pointer): DWord; function memGetProcAddr…

linux 定时执行kettle6,linux下使用crond定时执行kettle的job

由于第一次碰linux&#xff0c;对其不是很了解&#xff0c;导致这个问题困扰了我近一个月的时间&#xff0c;现在终于解决了&#xff0c;分享给大家。首先&#xff0c;安装jre&#xff0c;配置java环境变量(一)下载jre-6u23-linux-x64.bin下载地址&#xff1a;http://cds-esd.s…

【leetcode】ZigZag Conversion

题目简述 The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility) P A H N A P L S I I G Y I R And then read line by line: "PA…

ld-linux.so.2 重定向,2-Linux重定向和管道、Shell编程.doc

2-Linux重定向和管道、Shell编程评 分实验报告课程名称&#xff1a; 操作系统实验名称&#xff1a; Red Hat Linux操作系统的运用专 业&#xff1a; 信息与计算科学成 员&#xff1a; 庄小俪指导教师&#xff1a; 陆星家完成日期&#xff1a; 2013 年 9月 24日实验二 Linux的重…

linux中文乱码

txt文件在linux环境下打开呈现了乱码状态。 解决方法1&#xff1a;在linux用iconv命令&#xff0c;如乱码文件名为zhongwen.txt&#xff0c;那么在终端输入如下命令&#xff1a; iconv -f gbk -t utf8 zhongwen.txt > zhongwen.txt.utf8 如果eclipse打开后仍是乱码&#xff…

c语言用for编程图形,C语言编程题求解

2009-05-13C语言简单的编程题求解1.从键盘输入一//将四个函数编成四个子函数了&#xff0c;在一个主函数里调用&#xff0c;你若需要&#xff0c;分别取出来用也可以。以下源代码&#xff0c;VS2005编译通过。//1。从键盘输入一行字符&#xff0c;分别统计其中字母字符和数字字…

2.3线性表的链式存储和运算—单链表应用举例

例2.5 已知单链表H&#xff0c;写一算法将其倒置。即实现如图2.22的操作。(a)为倒置前&#xff0c;(b)为倒置后。 算法思路&#xff1a;依次取原链表中的每个结点&#xff0c;将其作为第一个结点插入到新链表中去&#xff0c;指针p用来指向当前结点&#xff0c;p为空时结束。 算…

c语言see函数,vprintf() - C语言库函数

C库函数 int vprintf(const char *format, va_list arg) 发送格式化输出到stdout使用一个参数列表传递给它。声明以下是 vprintf() 函数的声明。intvprintf(constchar*format,va_list arg)参数format -- 这是包含文本的字符串被写入到缓冲。它可以包含嵌入的格式在随后的附加…

js获取checkbox值的方法

js获取checkbox值的方法。分享给大家供大家参考。具体实现方法如下&#xff1a;<html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"> <title>js</title> </head> <script language&q…

c语言占用cpu的程序,Windows下用C语言获取进程cpu使用率,内存使用,IO情况

转自&#xff1a; http://zhangyafeikimi.iteye.com/blog/378658process_stat.h/** file * brief 进程统计信息函数的声明 * author 张亚霏 * date 2009/05/03 * version 0.1 * */ #ifndef PROCESS_STAT_H #define PROCESS_STAT_H #ifdef __cplusplus extern "C" { #…