CMakeLists写法总结
个人最近学习了一些关于常见的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.cmake
或opencv-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写法总结相关推荐
- ESP-ADF入门——从play_mp3_control入门adf
什么是ESP-ADF? ESP-ADF是乐鑫基于自家的SDK--esp-idf开发的音频开发框架 创建第一个esp-adf工程 本文主要为了方便大家对esp-adf的了解,抛弃了官方的流程.将esp- ...
- vs2019 基于pcl和opencv的体积检测算法 zed版本+安卓端新手版(二)
vs2019 基于pcl和opencv的体积检测算法 zed版本+安卓端新手版(二) Pcl库安卓端的环境配置和使用jni实现c++算法在安卓端的实现 Pcl库的编译 安装ubuntu系统 编译pcl ...
- ros学习(二) ros_visp传输文件
话题发布: #include <ros/ros.h> #include <image_transport/image_transport.h> #include <cv_ ...
- Cmake的CMakeLists.txt写法示例
Cmake的CMakeLists.txt写法示例 目录 示例一:单文件 示例二:多个源文件 示例三:将hello.c生成一个库来调用 示例四:工程分类文件夹编译 示例五:Cmake的install使用 ...
- 怎么写自己的CMakeLists.txt--二
之前写过一篇及其简单的关于CMakeLists.txt的写法,现在重点剖析find_package的用法. 如果程序中使用了外部库,事先并不知道它的头文件和链接库的位置,就要给出头文件和链接库的查找方 ...
- 【CMAKE系列】cmake中CMakeLists.txt脚本的常用语法
在不同的平台编译的时候,会用到一些系统内置的变量,比如操作系统名称,版本号之类: CMAKE_SYSTEM:系統全名,如 "Linux-2.4.22″,"FreeBSD-5.4-R ...
- Android-JNI开发系列《八》CMakeLists.txt语法使用
人间观察 带饭去上班的都是成年人的奢侈品! 技术永远在不断的更新升级,Android也一样. 目前在Android中的JNI开发都是采用的CMake进行编译c,c++代码来构建项目,早期都是Andro ...
- C++ 中头文件(.h)和源文件(.cc)的写法简述
C++ 中头文件(.h)和源文件(.cc)的写法简述 用C++编写比较大型的项目时,文件的分割管理确实确实是非常必要的 .下面就非常简洁明了地谈谈头文件(.h)和源文件(.cc)应该怎么写. 头文件( ...
- ros里Catkin的CMakelists/package.xml
Catkin是基于CMake的编译构建系统,具有以下特点: Catkin沿用了包管理的传统像 find_package()基础结构,pkg-config扩展了CMake,例如 软件包编译后无需安装就可 ...
- TVM示例展示 README.md,Makefile,CMakeLists.txt
TVM示例展示 README.md,Makefile,CMakeLists.txt TVM/README.md Open Deep Learning Compiler Stack Documentat ...
最新文章
- 面了一个大佬,一看就背了很多面试题
- spring源码分析之spring-jms模块详解
- 2014年中国互联网的50大预测
- android studio设置JDK路径
- wpf开发仿真3d软件_web 3d 与仿真
- spring boot 分布式锁组件 spring-boot-klock-starter
- LeetCode 2090. 半径为 k 的子数组平均值(滑窗)
- python开发转行做数据分析_转行学IT,Java、Python、大数据选择学哪个发展好?
- 用友NC删除会计科目的前后台操作
- 记录一下:new的几种用法
- Codeforces 768B - Code For 1(分治思想)
- Silverlight4 麦克风应用-录音机
- react router 路由守卫_React-router 路由守卫
- 光电自动避障小车_凌鸟智能总结了一下激光导航反射板AGV小车的优缺点!
- MISC:压缩包取证(zip爆破、明文攻击、伪加密、CRC32碰撞)
- 黄瓜客户端java_建造者模式
- navicat 使用ssh连接腾讯云主机mysql数据库(保姆级教程)
- 学习现代化的文章编写方式——关于Markdown语法的使用
- x265 码率控制算法(一)CQP
- 2023年电工杯 | 2023年电工杯数学建模竞赛思路(A题、B题)
热门文章
- IR(红外遥控)基本原理
- 经典歌曲多版本欣赏:刘欢《情怨》:华夏元素鲜明的“中国风格“
- Android N DisplayManager服务解析(二)
- JAVA 将唐诗按照古文样式输出
- Python exe Fatal error detected
- 实变函数与泛函分析课本pdf_免费推荐几本实变函数和泛函分析的书
- 5.Linux系统中解压缩详解
- linux运行uclinux程序,uClinux的编译与运行详解
- 计算机0x50006错误,你们安装win8使用崩溃多少次
- MATLAB APP Designer设计之图片处理