cmakelist的作用及使用

cpp平常的运行方式

cpp为编译型语言,需要把cpp文件编译成可执行文件

然后执行可执行文件

gcc main.cpp -o main

执行该可执行文件 ./main

但由于一些依赖错综复杂,且需要大量指令依次执行

还有在服务器上寻找库的原因,产生了makefile

Makefile 即为一个 顺序存了很多命令的文件。

我们执行make的时候,即运行makefile 按照顺序执行makefile里的指令

makefile的结构是这样的

目标:依赖目标

命令

makefile里默认一个目标就是一个文件

我们假如想要不生成这个文件,就要加上

.PHONY: 目标

使用make指令的时候,通常要加上各种参数,表明你想要的是哪个目标,比如

install:…

uninstall: …

make install 就会执行install

make uninstall 就会执行uninstall

直接 make 会自动执行第一个目标

但写makefile也是一个很繁杂的任务,这时cmake出现了

它作为一个跨平台的工具,可以帮助找资源,生成makefile

cmake一般的流程

首先 项目文件中一般会有一个 cmakelist

我们创建一个文件夹叫build(什么名字都可以),代表在这里生成可执行文件

在build路径下,执行cmake …

cmake会帮助链接好各个库,生成好makefile

再执行 make 指令,生成可执行文件

一个简单的cmakelist的样式

cmake_minimum_required(VERSION 2.6)
project(MY_PROJECT)set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)find_package(PCL 1.9.1 REQUIRED COMPONENTS common io geometry kdtree search features surface visualization filters)file(GLOB SOURCES main.cpp)add_executable(server ${SOURCES})
#include_directories(${CMAKE_SOURCE_DIR}/include)
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})#include_directories("/opt/libjpeg-turbo/include")
#link_directories("/opt/libjpeg-turbo/lib")include_directories(server ${PCL_INCLUDE_DIRS} )
target_link_libraries(server ${PCL_LIBRARIES} turbojpeg zstd)

SOURCES /home/eminem/pcl_test/main.cpp
PCL_LIBRARY_DIRS /usr/lib/x86_64-linux-gnu
PCL_DEFINITIONS -DDISABLE_PCAP;-DDISABLE_PNG;-DDISABLE_LIBUSB_1_0
PCL_INCLUDE_DIRS /usr/include/pcl-1.10;/usr/include/eigen3;/usr/include;/usr/include/ni;/usr/include/openni2;/usr/include/vtk-7.1;/usr/include/freetype2;/usr/include/x86_64-linux-gnu
PCL_LIBRARIES pcl_common;pcl_octree;pcl_io;pcl_kdtree;pcl_search;pcl_features;pcl_surface;pcl_visualization;pcl_sample_consensus;pcl_filters;/usr/lib/x86_64-linux-gnu/libboost_system.so;/usr/lib/x86_64-linux-gnu/libboost_filesystem.so;/usr/lib/x86_64-linux-gnu/libboost_date_time.so;/usr/lib/x86_64-linux-gnu/libboost_iostreams.so;/usr/lib/x86_64-linux-gnu/libboost_regex.so;optimized;/home/eminem/.conda/envs/myTorch/lib/libqhull_p.so;debug;/home/eminem/.conda/envs/myTorch/lib/libqhull_p.so;/usr/lib/libOpenNI.so;/usr/lib/libOpenNI2.so;vtkChartsCore;vtkCommonColor;vtkCommonCore;vtksys;vtkCommonDataModel;vtkCommonMath;vtkCommonMisc;vtkCommonSystem;vtkCommonTransforms;vtkCommonExecutionModel;vtkFiltersGeneral;vtkCommonComputationalGeometry;vtkFiltersCore;vtkInfovisCore;vtkFiltersExtraction;vtkFiltersStatistics;vtkImagingFourier;vtkImagingCore;vtkalglib;vtkRenderingContext2D;vtkRenderingCore;vtkFiltersGeometry;vtkFiltersSources;vtkRenderingFreeType;/usr/lib/x86_64-linux-gnu/libfreetype.so;/usr/lib/x86_64-linux-gnu/libz.so;vtkFiltersModeling;vtkImagingSources;vtkInteractionStyle;vtkInteractionWidgets;vtkFiltersHybrid;vtkImagingColor;vtkImagingGeneral;vtkImagingHybrid;vtkIOImage;vtkDICOMParser;vtkmetaio;/usr/lib/x86_64-linux-gnu/libjpeg.so;/usr/lib/x86_64-linux-gnu/libpng.so;/usr/lib/x86_64-linux-gnu/libtiff.so;vtkRenderingAnnotation;vtkRenderingVolume;vtkIOXML;vtkIOCore;vtkIOXMLParser;/usr/lib/x86_64-linux-gnu/libexpat.so;vtkIOGeometry;vtkIOLegacy;vtkIOPLY;vtkRenderingLOD;vtkViewsContext2D;vtkViewsCore;vtkRenderingContextOpenGL2;vtkRenderingOpenGL2;FLANN::FLANN

六 命令

project (HELLO)   #指定项目名称,生成的VC项目的名称;

使用${HELLO_SOURCE_DIR}表示项目根目录

file(GLOB SOURCES *.cpp)

将所有cpp文件 的绝对路径 都加入到 SOURCES 变量中

find_package(PCL 1.9.1 REQUIRED …) 找库

include_directories:指定头文件的搜索路径,相当于指定gcc的-I参数

include_directories (${HELLO_SOURCE_DIR}/Hello)  #增加Hello为include目录

link_directories:动态链接库或静态链接库的搜索路径,相当于gcc的-L参数

>> link_directories (${HELLO_BINARY_DIR}/Hello)     #增加Hello为link目录

add_subdirectory:包含子目录

>> add_subdirectory (Hello)

add_executable:编译可执行程序,指定编译,好像也可以添加.o文件

>> add_executable (helloDemo demo.cxx demo_b.cxx)   #将cxx编译成可执行文件——

add_definitions:添加编译参数

add_definitions(-DDEBUG)将在gcc命令行添加DEBUG宏定义;

add_definitions( “-Wall -ansi –pedantic –g”)

target_link_libraries:添加链接库,相同于指定-l参数

target_link_libraries(demo Hello) #将可执行文件与Hello连接成最终文件demo

add_library:

add_library(Hello hello.cxx)  #将hello.cxx编译成静态库如libHello.a

add_custom_target:

message( status|fatal_error, “message”):

set_target_properties( … ): lots of properties… OUTPUT_NAME, VERSION, …

link_libraries( lib1 lib2 …): All targets link with the same set of libs

cmakelist的作用及使用相关推荐

  1. 【C++】Vscode 中使用CMakeLists(推荐)构建C++项目:项目结构、各个文件夹的作用、从编码到debug

    目录 一.vscode配置 二.项目结构 三.编译 3.1 工作原理 3.2 在vscode中如何使用cmake进行编译 三.调试 Vscode建立C++项目结构及各个文件夹的作用(不使用CMakeL ...

  2. caffe学习之——CMakeList.txt内容详解

    在对Caffe使用cmake方式编译安装时产生了对这个文件的好奇,打算做个注释理解, 参考:https://blog.csdn.net/fuzi2012/article/details/7245453 ...

  3. vscode cmake-tools 的作用,以及和cmake的联系

    vscode cmake-tools 的作用,以及和cmake的联系 camke tools 是 vscode 中的一个插件,顾明思意,它和cmake有关,他是vscode中编译工程的工具. linu ...

  4. cmakelist官方教程_CMakeLists编辑简明教程

    备注:明确说明简明教程,背景就是新建一个工程文件夹且称之为test里面include文件夹放所有头文件,src放所有源文件,CMakeLists.txt直接放在test文件夹下,不引入任何其他库,例如 ...

  5. Cmakelist知识总结

    Cmakelist知识总结 文章目录 Cmakelist知识总结 程序编译链接过程简介 Cmakelist简介 Cmakelist写法 cmakelist实例解析 程序编译链接过程简介 一个完整的 C ...

  6. cmakelist基本语法

    一.几个基本概念: 1.GCC a.由GUN开发的编译器,支持C/C++,Java等语言. b.项目简单时,可以使用gcc/g++来进行编译. c.项目复杂时,只使用gcc来进行编译会变得非常复杂. ...

  7. 关于CmakeList的修改

    关于CmakeList的修改 1.CmakeList.txt 下面来研究一下CmakeList.txt文件的编写方式,先预览一下一个完整的需要包括的内容 cmake_minimum_required( ...

  8. KiCAD源码解析(2):根目录CmakeList解析

    KiCAD源码解析(2):根目录CmakeList解析 Kicad根目录CmakeList解析 提示:想学习cmake的看此篇文章也用处多多 根目录CMakeLists.txt解析 KiCAD源码解析 ...

  9. ROS中使用思岚激光雷达进行跟随和Cmakelist.txt讲解

    之前一直在弄ROS小车的底盘和编写底盘的代码,现在把底盘已经弄好了,所以开始编写一些上层的代码和算法,这篇博客主要介绍使用思岚雷达来进行跟随和Cmakelist.txt的讲解,本人注重于手动DIY R ...

最新文章

  1. java switch 表达式_尝鲜Java 12新特性:switch表达式
  2. 如何了解自己的认知偏差_了解吸引力偏差
  3. go tcp连接_TCP漫谈之keepalive和time_wait
  4. 三星Galaxy S22 Ultra真机首曝:颜值与实力并存堪称完美
  5. 关于页面之间局部显示的几种方式
  6. 【spring】在servlet中注入spring的bean,servlet容器和spring容器
  7. Win7 x64 sp1安装orcale 10g
  8. 常用排序算法的Java实现 - 1
  9. c语言二维数组错误语法,关于c语言动态分配二维数组free的错误求dalao看看怎么回事谢谢啊~~~~...
  10. elasticsearch之 hdfs上的备份和还原操作
  11. 顺序表的类型定义与基本操作
  12. html怎么播放f4v,优秀的flv网页播放器,支持高清f4v,mp4,rtmp,支持广告
  13. Bouncy Castle Java 平台轻量级密码术包
  14. cisco2960(思科2960)
  15. android视频壁纸源码,Android视频壁纸的实现
  16. 影视剧中十大经典反派台词!(来自大洋论坛)
  17. LaTeX 相对于 Word 有什么优势?
  18. 【echarts应用】---pie饼图篇
  19. Android Material Design动画 Curved motion | 曲线运动
  20. 广州“粤A000F1”车牌拍出74万天价(图)

热门文章

  1. 谷歌量子计算机_轰动全球的谷歌量子计算机
  2. linux系统主要用来做什么,linux是用来干嘛的?Linux运维平时都做什么
  3. 浅写一下iOS录屏开发~ 搬砖人的自我记录
  4. Shift-JIS字符集判断
  5. JSPatch实现原理详解:让JS调用/替换任意OC方法
  6. 硬件设备接入企业微信调试面板
  7. 百度webupload的使用
  8. 刘德华徐静蕾新片《投名状》
  9. Php 同步日历任务 .ics 文件
  10. Outlook for Mac Beta现在支持共享日历和.ics文件