个人最近学习了一些关于常见的CMakeLists的一些写法格式,分享给大家。

CMAKE_MINIMUM_REQUIRED(VERSION xxx) 该项表示要求CMAKE的最低版本号.

PROJECT(aim1) 此项表示所建立的工程名称 aim1;

FIND_PACKAGE(xxx)该命令首先会在模块路径中寻找 Find<name>.cmake,这是查找库的一个典型方式。具体查找路径依次为CMake: 变量${CMAKE_MODULE_PATH}中的所有目录。如果没有查询到,随后会查看它自己的模块目录 /share/cmake-x.y/Modules/ ;

如果没找到这样的文件,find_package()会在~/.cmake/packages//usr/local/share/中的各个包目录中查找,寻找<库名字的大写>Config.cmake 或者 <库名字的小写>-config.cmake (比如FIND_PACKAGE(Opencv REQUIRED),它会查找/usr/local/share/OpenCV中的OpenCVConfig.cmakeopencv-config.cmake)。个人认为这是CMake内置的快速查找方法

SET( SRC_DIR_PATH src ),SET命令是用来设置变量,换句话说就是给变量赋值,例如本条命令表示SRC_DIR_PATH=src,注意这里的src代表Cmakelists的相对路径,即目录内的src文件夹,。SRC_DIR_PATH表示源文件目录路径。

FILE(GLOB_RECURSE SOURCE_FILES "src/*.cpp"),FILE文件命令具体包括许多,在这里使用GLOB_RECURSE 代表把该目录(src下)的所有源文件都赋予变量SOURCE_FILES。

INCLUDE_DIRECTORIES(xxx/include),INCLUDE就像源文件内的include一样,用来设置头文件。这里是用来设置头文件的搜索目录。告诉CMake,编译的时候去哪里找头文件。

LINK_DIRECTORIES(xxx/lib),LINK就是链接的意思,lib是库,该命令就是要链接库,设置动态链接库的目录,例如链接caffe,可以表示为LINK_DIRECTORIES(/home/usr/caffe/build/lib)。既然已经设置好了链接库的目录,那么具体需要链接哪些库,需要通过下面的操作完成。

SET( LIB_PROJECT caffe glog boost_system protobuf boost_thread gflags ),该命令是在设置链接库文件的名称。

随后,需要在ADD_EXECUTABLE()命令后写出TARGET_LINK_LIBRARIES(aim1 ${LIB_PROJECT}),要链接的动态库, 参数指明库的名字即可,比如libcaffe.so,这里是需要加上lib前缀和.so后缀的,或者以变量的形式表示。而上条设置名称时,不需要这些前后缀。

ADD_EXECUTABLE(TARGET ${PUBLIC_SRC_FILE} ${SRC_DIR_PATH}/detect_read_video_mixture.cpp ),生成可执行文件,需要将生成的名称和TARGET_LINK_LIBRARIES必须保持一致。

message( STATUS "hello world"),message命令就是向终端窗口发送消息,例如本条命令就是发送hello world。

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
# 指定工程名称
PROJECT(abc)
set(CMAKE_CXX_FLAGS "-std=c++11")# 导入OpenCV库
FIND_PACKAGE( OpenCV REQUIRED )# 设置源文件
SET( SRC_DIR_PATH src )
FILE(GLOB_RECURSE SOURCE_FILES "src/*.cpp")# 设置头文件搜索目录
SET( CAFFE_ROOT /home/kevin/SSD/caffe)
SET( CUDA_HOME /usr/local/cuda-8.0 )
INCLUDE_DIRECTORIES(${CAFFE_ROOT}/include/ ./include/ ${CAFFE_ROOT}/.build_release/src/ ${CUDA_HOME}/include/ )# 设置动态库链接目录
LINK_DIRECTORIES( ${CAFFE_ROOT}/build/lib/ ${CUDA_HOME}/lib64/)# 设置要链接的库文件
SET( LIB_PROJECT caffe glog boost_system protobuf boost_thread gflags)# 指定执行文件输出目录
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
# 生成可执行文件,即程序
ADD_EXECUTABLE( abc ${PUBLIC_SRC_FILE} ${SRC_DIR_PATH}/test.cpp  )# 要链接的动态库, 参数指明库的名字即可,比如libxxxx1.so, 指明是xxxx1即可!!!
TARGET_LINK_LIBRARIES( abc ${LIB_PROJECT} ${OpenCV_LIBS} )

CMakeLists写法总结相关推荐

  1. ESP-ADF入门——从play_mp3_control入门adf

    什么是ESP-ADF? ESP-ADF是乐鑫基于自家的SDK--esp-idf开发的音频开发框架 创建第一个esp-adf工程 本文主要为了方便大家对esp-adf的了解,抛弃了官方的流程.将esp- ...

  2. vs2019 基于pcl和opencv的体积检测算法 zed版本+安卓端新手版(二)

    vs2019 基于pcl和opencv的体积检测算法 zed版本+安卓端新手版(二) Pcl库安卓端的环境配置和使用jni实现c++算法在安卓端的实现 Pcl库的编译 安装ubuntu系统 编译pcl ...

  3. ros学习(二) ros_visp传输文件

    话题发布: #include <ros/ros.h> #include <image_transport/image_transport.h> #include <cv_ ...

  4. Cmake的CMakeLists.txt写法示例

    Cmake的CMakeLists.txt写法示例 目录 示例一:单文件 示例二:多个源文件 示例三:将hello.c生成一个库来调用 示例四:工程分类文件夹编译 示例五:Cmake的install使用 ...

  5. 怎么写自己的CMakeLists.txt--二

    之前写过一篇及其简单的关于CMakeLists.txt的写法,现在重点剖析find_package的用法. 如果程序中使用了外部库,事先并不知道它的头文件和链接库的位置,就要给出头文件和链接库的查找方 ...

  6. 【CMAKE系列】cmake中CMakeLists.txt脚本的常用语法

    在不同的平台编译的时候,会用到一些系统内置的变量,比如操作系统名称,版本号之类: CMAKE_SYSTEM:系統全名,如 "Linux-2.4.22″,"FreeBSD-5.4-R ...

  7. Android-JNI开发系列《八》CMakeLists.txt语法使用

    人间观察 带饭去上班的都是成年人的奢侈品! 技术永远在不断的更新升级,Android也一样. 目前在Android中的JNI开发都是采用的CMake进行编译c,c++代码来构建项目,早期都是Andro ...

  8. C++ 中头文件(.h)和源文件(.cc)的写法简述

    C++ 中头文件(.h)和源文件(.cc)的写法简述 用C++编写比较大型的项目时,文件的分割管理确实确实是非常必要的 .下面就非常简洁明了地谈谈头文件(.h)和源文件(.cc)应该怎么写. 头文件( ...

  9. ros里Catkin的CMakelists/package.xml

    Catkin是基于CMake的编译构建系统,具有以下特点: Catkin沿用了包管理的传统像 find_package()基础结构,pkg-config扩展了CMake,例如 软件包编译后无需安装就可 ...

  10. TVM示例展示 README.md,Makefile,CMakeLists.txt

    TVM示例展示 README.md,Makefile,CMakeLists.txt TVM/README.md Open Deep Learning Compiler Stack Documentat ...

最新文章

  1. 面了一个大佬,一看就背了很多面试题
  2. spring源码分析之spring-jms模块详解
  3. 2014年中国互联网的50大预测
  4. android studio设置JDK路径
  5. wpf开发仿真3d软件_web 3d 与仿真
  6. spring boot 分布式锁组件 spring-boot-klock-starter
  7. LeetCode 2090. 半径为 k 的子数组平均值(滑窗)
  8. python开发转行做数据分析_转行学IT,Java、Python、大数据选择学哪个发展好?
  9. 用友NC删除会计科目的前后台操作
  10. 记录一下:new的几种用法
  11. Codeforces 768B - Code For 1(分治思想)
  12. Silverlight4 麦克风应用-录音机
  13. react router 路由守卫_React-router 路由守卫
  14. 光电自动避障小车_凌鸟智能总结了一下激光导航反射板AGV小车的优缺点!
  15. MISC:压缩包取证(zip爆破、明文攻击、伪加密、CRC32碰撞)
  16. 黄瓜客户端java_建造者模式
  17. navicat 使用ssh连接腾讯云主机mysql数据库(保姆级教程)
  18. 学习现代化的文章编写方式——关于Markdown语法的使用
  19. x265 码率控制算法(一)CQP
  20. 2023年电工杯 | 2023年电工杯数学建模竞赛思路(A题、B题)

热门文章

  1. IR(红外遥控)基本原理
  2. 经典歌曲多版本欣赏:刘欢《情怨》:华夏元素鲜明的“中国风格“
  3. Android N DisplayManager服务解析(二)
  4. JAVA 将唐诗按照古文样式输出
  5. Python exe Fatal error detected
  6. 实变函数与泛函分析课本pdf_免费推荐几本实变函数和泛函分析的书
  7. 5.Linux系统中解压缩详解
  8. linux运行uclinux程序,uClinux的编译与运行详解
  9. 计算机0x50006错误,你们安装win8使用崩溃多少次
  10. MATLAB APP Designer设计之图片处理