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模块?相关推荐
- linux下QT工程调用opencv、libtorch,并用cmake编译,及其遇到的一些问题的解决方法
linux下QT工程调用opencv.libtorch,并用cmake编译: 文章目录 一.新建QT工程 二.编写CMakeLists.txt文件 三.各个文件的内容如下: 1.mainwindow. ...
- Linux下的编译(环境是centos6.8 gcc 4.4.7)
Linux下的编译(环境是centos6.8 gcc 4.4.7) 1. 运行命令:yum install gcc gcc-c++ bzip2 bzip2-devel bzip2-libs Pytho ...
- Linux下静态编译的一个TIP
Linux下静态编译的一个TIP | 素包子 Linux下静态编译的一个TIP 2010年3月28日 baoz 阅读评论 linux下静态编译好处很多,一来是可以跨发行版(debian redhat ...
- OpenCV在Linux下的编译安装(Ubuntu )
OpenCV在Linux下的编译安装(Ubuntu ) 1.先安装相关的库: sudo apt-get install build-essential sudo apt-get install lib ...
- linux apache 安装 rewrite,linux下单独编译安装Apache rewrite_module
Redhat linux下单独编译安装Apache rewrite_module Apache已经编译安装完了,今天弄了个lifebox,装完后发现必须得用rewrite,所以就给它装了个~~ 找到a ...
- Linux下Nginx编译安装后的开机自启动设置
Linux下Nginx编译安装后的开机自启动设置 一.查看当前Nginx启动状态 二.而配置Nginx相关服务文件 三 .设置nginx命令 四.设置开机启动 五.测试开机启动 一.查看当前Nginx ...
- Linux下Nginx编译安装过程详解
Linux下Nginx编译安装过程详解 一.Nginx介绍 二.Nginx源码下载 1.打开Nginx官网 2.下载官网的源码包 三.Nginx源码安装 1.解压源码包 2.安装开发包组及环境 3.编 ...
- 从四个问题透析Linux下C++编译链接
摘要:编译&链接对C&C++程序员既熟悉又陌生,熟悉在于每份代码都要经历编译&链接过程,陌生在于大部分人并不会刻意关注编译&链接的原理.本文通过开发过程中碰到的四个典型 ...
- linux nginx编译详解,Linux下nginx编译安装教程和编译参数详解
这篇文章主要介绍了Linux下nginx编译安装教程和编译参数详解,需要的朋友可以参考下 一.必要软件准备 1.安装pcre 为了支持rewrite功能,我们需要安装pcre 复制代码 代码如下:# ...
- Linux下多线程编译
linux下多线程编译注意事项: 编译时加入 -lm -lpthread参数 参数说明:-lm 使用math.h中声明的库函数还有一点特殊之处,gcc命令行必须加-lm选项,因为数学函数位于libm ...
最新文章
- 2022-2028年中国地铁广告行业研究及前瞻分析报告
- Python数据分析入门之pandas基础总结
- 字符串工具类、数组工具类、集合工具类、转型操作工具类、编码与解码操作工具类...
- spring文件下载记录
- python实现文件共享_改进的一行Python实现文件共享--支持并发
- 项目开发中常用JS表单取值方法
- Mybatis中的resultType与resultMap区别
- Product Helper
- java 累进计费率计算_设计费400万,缴纳所得税100万,如何筹划
- 微信小程序使用函数的方法
- 已知圆心 坐标和一点坐标和角度 就之后的坐标_LaTeX 中绘制多个相交椭圆(对起始角度与终止角度的思考)...
- 工具-管理工具资源集合
- Keil自动格式化代码
- C++学习记录7:定义教师类Teacher和干部类Cadre,采用多重继承的方式由这两个类派生出新类Teacher_Cadre(教师兼干部类)
- 苹果CMS火车头采集发布模块教程
- 移动端那些事儿(二)jquery手势插件之jGestures
- C.Lorenzo Von Matterhorn(思维+朴素lca思想)
- Apache Jena配置
- LeetCode: 183. Customers Who Never Order
- 创业过程中不要被理想主义所牵绊
热门文章
- spring学习(43):属性注入中注入引用对象
- 第十一期:数据挖掘其实就是为了干这四种事?
- java学习(150):文本缓冲流
- 隔离型RS232串口电路
- 递归求和的复习-计算m~n整数和
- 64位虚拟机下asm()语法_用Hyper-V在win10中创建虚拟机,简单快捷,不用安装其它软件...
- Nginx快速搭建和基本使用
- python 三维地球_用python生成地球运动的动态模拟动态图
- linux6.7能升级6.8吗,CentOS 六、7升级gcc至4.八、4.九、5.二、6.三、7.3等高版本
- markdown 常用语法总结 - 个人版