如何在QT中用cmake和qmake编译PCL程序
来源:互联网 发布:聚宝盆手机计划软件 编辑:程序博客网 时间:2024/06/02 07:27
up主,今天十分蛋疼,因为姿势欠缺,续航时间太有限,这次吃过午饭回来赶紧水一篇,要不然就睡着了,也给这个4月画一个完美的冒号(表示开始了…)
今天介绍如何用qmake,配置qt中的pcl工程,以便可以顺利编译运行
大家都知道,qt工程有一个.pro文件,当然如果你建立了一个非qt工程就不会有(这句好像是废话)
我们来看一下.pro的写法(仅针对部分用法)
#-------------------------------------------------## Project created by QtCreator 2015-04-01T01:21:16##-------------------------------------------------QT += coreQT -= guiTARGET = lidar_PCDCONFIG += consoleCONFIG -= app_bundleTEMPLATE = appSOURCES += main.cpp \ readlidar.cpp \ pointstopcd.cppHEADERS += \ readlidar.h \ pointstopcd.hLIBS += \# pcl -L/usr/local/lib \ -lpcl_io -lpcl_common \ # boost -L/usr/lib/x86_64-linux-gnu \ -lboost_system -lboost_filesystem \INCLUDEPATH +=/usr/include/pcl-1.7/ \ /usr/include/eigen3 \
是不是很容易懂,QT +=core config += console 说明这是一个qtconsole工程,没有用到gui,因此 QT-=gui,如果是一个widget或者ui基类,mainwindow,那么qt+=gui
TARGET是目标工程的名称,下面的SOURCES HEADERS 都是工程里的文件,注意写法。LIBS 是配置工程用到的静态库动态库的路径以及库名。
例如这里用到了boost里的libboost_system.so 它在路径
/usr/lib/x86_64-linux-gnu
因此这里-L/usr/lib/x86_64-linux-gnu 大写的L代表路径
而库名则写成-lboost_system, lib省略了,只留下了-l, 请注意
INCLUDEPATH用来配置项目中外部头文件的搜索路径,这里如果路径是多个的话,记得每行末尾用 ‘\’ 割开,同时下一行直接黏上就哦了
通过上述方法,对.pro文件进行修改,可以让qmake来编译生成makefie,代替PCL cosole程序生成的CMakeList,不过qt也可以建立CMake工程,这样就可以在qtcreator里生成的CMakelist进行配置,下面我们来看一下对应的CMakeList应该怎么写(非常简单 >^<)
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)project(lidar_PCD)find_package(PCL 1.7 REQUIRED Qt4 COMPONENTS QtCore REQUIRED)include_directories(${PCL_INCLUDE_DIRS})link_directories(${PCL_LIBRARY_DIRS})add_definitions(${PCL_DEFINITIONS})add_executable(lidar_PCD main.cpp readlidar.cpp pointstopcd.cpp readlidar.h pointstopcd.h)target_link_libraries (lidar_PCD ${PCL_LIBRARIES})不解释了,因为很容易懂。。。主要是我也不太会,这是copy的官网demo里的第一个是cmake的版本约束project()确定了工程名称,这里是lider_PCD, 以后可以通过${PCL_PROJECT}引用find_package(),需要包含的模块组件,这里是PCL 1.7 REQUIRE,表示包含所有PCL组件,如果想指定模块组件,就用COMPONENTS 模块名称 geninclude_directories(${PCL_INCLUDE_DIRS}) pcl头文件路径配置link_directories(${PCL_LIBRARY_DIRS}) pcl链接路径配置add_definitions(${PCL_DEFINITIONS}) pcl所需要的预处理器定义和编译器标志这些宏定义都是pcl预留的,咱也可以用SET(VAR_NAME var_value),来设置自定义变量名,下面就可以引用了如下例:SET(SEPC_INCLUDE_PATH /usr/local/include/.../...)这里定义了一个名为SEPC_INCLUDE_PATH的宏定义变量假设下面的CmakeLists就可以用include_directories(${SEPC_INCLUDE_PATH})来包含进来了注意要加${}上面的宏定义不能省。他们是cmake从pcl目录中自动找到的会自动设置add_executable(lidar_PCD main.cpp readlidar.cpp pointstopcd.cpp readlidar.h pointstopcd.h)这里.h 文件可以不写到add_executable里,但是要在include_dirs都包含这里有个指令要介绍一下就是:aux_source_directory(dir VAR_NAME)作用是发现当前目录下所有的源码文件(名称,包含类型)如下:aux_source_directory(. SRC_LIST)target_link_libraries (lidar_PCD ${PCL_LIBRARIES}) 将刚刚配置的头文件,库文件搜索路径告诉链接器,让链接器链接用到的库,这里是由${PCL_LIBRARIES}指示,如果需要链接多个库,请用空格隔开,例如:target_link_libraries (lidar_PCD ${PCL_LIBRARIES} ${QT_LIBRARIES})
说明:
另外CMake里的指令时大小写insensitive的, 建议大写
( 我怎么都是小写…好,下面大写 )
调试的时候可以用
MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "Message")SEND_ERROR: 错误部分跳过,发送错误信息STATUS: 输出前缀唯一的信息FATAL_ERROR: 致命的错误,立即终止cmake
功能是在终端上输出一段“Message” 的信息.
说的有点粗糙,今天就到这里了,还是困成狗,必须睡觉
- 如何在QT中用cmake和qmake编译PCL程序
- Cmake如何编译Qt程序
- Ubuntu下 在终端使用 qmake 编译 Qt widgets程序
- 如何在非Qt 程序中使用qmake
- 利用qmake编译Qt程序简述
- Qmake在非Qt程序中的使用
- 如何在unix下编译QT程序?
- win7 32bit 用qmake编译qt程序
- CMake编译Widget UI Qt程序
- CMake编译Qt程序+UI+Resources
- 如何在Windows下通过Cmake编译和使用PCRE
- vs2010 下配置pcl cmake qt
- qmake+mingw手工编译qt
- QT编译时 qmake错误
- QT程序如何编译
- 使用QT和cmake编译和调试最简单的程序
- Qt软件开发文档1---Cmake编译QT程序
- 在Qtcreator下cmake工程文件及使用Qt制作PCL C++ GUI
- 欢迎使用CSDN-markdown编辑器
- Codeforces Round #297 (Div. 2) (ABCDE题解)
- Lua项目常见问题
- 第9题:判断整数序列是不是二元查找树的后序遍历结果
- test.1
- 如何在QT中用cmake和qmake编译PCL程序
- Android如何使用API文档
- 求最大公约数
- JAVA 第一次作业 统计代码文件行数【空行+注释行+代码行】
- 写了一个小东西: 修改指定文件夹下所有文件为不可识别文件,可还原!
- hdu 4738 Caocao's Bridges (找桥,有重边)
- Camera震屏效果
- 黑马程序员——Java概述
- Hadoop2伪分布式安装