CMakeList.txt(3): 一个cmake实例
介绍一个比较实用的例子,即包含生成静态库又包含引入外部头文件和链接库的cmake demo。
先按照工程规范建立工程目录,并编写代码,以下面的工程目录为例进行解释这个例子,工程的目录结构为:

1. 编写CMakeLists.txt
由于一个工程目录中包含多个项目,其中在此项目中包含util项目和main项目,其中util项目是用以生成main程序需要的静态库,main是用以生成可执行文件。
在工程项目中的父目录向有一个CMakeLists.txt是用以声明定义工程需要的Cmake设置还定义了子目录src,用以递归的调用src中的MakeLists.txt。
1) 工程目录的CMakeLists.txt内容定义如下:
PROJECT(HELLO) 定义工程的名称
ADD_SUBDIRECTORY(src) 用以递归的调用src中的MakeLists.txt
2)src里面的CMakeLists.txt内容定义如下:
ADD_SUBDIRECTORY(main) 用以递归的调用main中的MakeLists.txt
ADD_SUBDIRECTORY(util) 用以递归的调用util中的MakeLists.txt
3)util目录里面的CMakeLists.txt是用以定义生成util静态库的规则,其中内容如下:
SET(LIBRARY_OUTPUT_PATH ${HELLO_SOURCE_DIR}/lib) 定义了库生成的路径,LIBRARY_OUTPUT_PATH是一个内部变量,存放库生成路径
SET(CMAKE_C_COMPILER g++) 定义编译器
SET(SRC_LIST hello.c) 定义库文件需要的源文件
INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/include) 定义非标准库头文件要搜索的路径
ADD_LIBRARY(util STATIC ${SRC_LIST})
4)在main目录中的CMakeLists.txt是用来定义可执行程序编译和链接时所需要的一些命令或环境。内容如下:
SET(EXECUTABLE_OUTPUT_PATH ${HELLO_SOURCE_DIR}/bin) 定义执行文件输出路径
SET(SRC_LIST main.cpp) 定义库文件需要的源文件
INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/include) 定义非标准库头文件要搜索的路径
LINK_DIRECTORIES(${HELLO_SOURCE_DIR}/lib) 定义依赖静态库要搜索的路径
ADD_EXECUTABLE(hello ${SRC_LIST}) 生成执行文件
TARGET_LINK_LIBRARIES(hello util) TARGET_LINK_LIBRARIES用以定义链接时需要的库文件。
2.在工程目录下创建build目录,并采用out-of-source方式编译项目。执行命令cmake ..,执行结果如下:

3)然后进行make

4)安装
重新编辑工程目录下的CMakeLists.txt。在CMakeLists.txt中添加如下命令:
INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake_demo)
INSTALL(PROGRAMS run.sh DESTINATION bin)
INSTALL(PROGRAMS bin/hello DESTINATION bin)
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake_demo)
这些命令表示在执行make install命令时,安装程序会拷贝相应的文件、目录或程序到指定的前缀开始的目录中
cmake执行命令如下:cmake -DCMAKE_INSTALL_PREFIX=~/data/cmake_demo ..
这时将工程目录安装到~/data/cmake_demo目录下。执行结果如下:

CMakeList.txt(3): 一个cmake实例的更多相关文章
- ROS初级教程 cmake cmakelist.txt 的编写教程
有很多 的时候我们使用别人的程序包.然后添加东西的时候缺少什么东西,会使程序编译不过去,甚至无法运行,接下来介绍一下cmakelist.txt 的每一行的作用.为了以后添加和修改方便. 2.整体结构和 ...
- CMake 使用方法 & CMakeList.txt<转>
CMake 使用方法 & CMakeList.txt cmake 简介 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的make ...
- CMakeList.txt设置OpenCv路径
源文件imageBasics.cpp #include <iostream> #include <chrono> using namespace std; #include & ...
- 单个源文件下CmakeList.txt
单个源文件下CmakeList.txt 1. main.c代码 & CmakeLists.txt 文件内容 在任意自己选定的目录下(t1/)编写main.c 与 CmakeLists.txt ...
- C++ 容器的综合应用的一个简单实例——文本查询程序
C++ 容器的综合应用的一个简单实例——文本查询程序 [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例.通过实现一个简单的文本查 ...
- Asp.net读取和写入txt文件方法(实例)!
Asp.NET读取和写入txt文件方法(实例)! [程序第一行的引入命名空间文件 - 参考] System; using System.Collections; using System.Config ...
- 每天一个JavaScript实例-检測表单数据
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- MySQL-配置参数时 报错:remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu......
报错:remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu...... 原因: 1.第一次配置参数时,不完整,出现错误!,(报错也会产生CMak ...
- Android 只开启一个Activity实例
在一个Activity中,多次调用startActivity()来启动另一个Activity,要想只生成一个Activity实例,方法有两种. 方法一:设置起动模式 一个Activity有四种启动模式 ...
随机推荐
- 洛谷P2664 树上游戏(点分治)
题意 题目链接 Sol 神仙题..Orz yyb 考虑点分治,那么每次我们只需要统计以当前点为\(LCA\)的点对之间的贡献以及\(LCA\)到所有点的贡献. 一个很神仙的思路是,对于任意两个点对的路 ...
- 微信分享大图遇到的问题(Android)
起因: 要做一个微信图片分享的功能,但是对于大图会如下问题: 当时没有仔细查看错误日志,单纯的以为是图片太大的问题. 分享图片代码: public void WXsharePic(String tra ...
- Python使用Plotly绘图工具,绘制面积图
今天我们来讲一下如何使用Python使用Plotly绘图工具,绘制面积图 绘制面积图与绘制散点图和折线图的画法类似,使用plotly graph_objs 中的Scatter函数,不同之处在于面积图对 ...
- mssql sqlserver 对不同群组对象进行聚合计算的方法分享
摘要: 下文讲述通过一条sql语句,采用over关键字同时对不同类型进行分组的方法,如下所示: 实验环境:sql server 2008 R2 当有一张明细表,我们需同时按照不同的规则,计算平均.计数 ...
- scrapy CrawlSpider解析
CrawlSpider继承自Spider, CrawlSpider主要用于有规则的url进行爬取. 先来说说它们的设计区别: SpiderSpider 类的设计原则是只爬取 start_urls 中的 ...
- sprintboot 中占位符及多环境配置
(原) 关于springboot中多环境配置问题 1.在application.properties文件中通过 spring.profiles.active=... 选择系统所要加载的配置文件,这里的 ...
- Net core 关于缓存的实现
在很多项目中, 需要用到缓存,借鉴网上前辈们的一些经验,自己再进行总结简化了一些, 做出如下的缓存操作,其中包含内存缓存(IMemoryCache) 和 Redis 缓存; 一.前提内容, 导入两个包 ...
- 使用队列实现栈(1)(Java)
class MyStack { private Queue q1; private Queue q2; public MyStack(int size) { this.q1 = new Queue(s ...
- 如何改善SSH连接过慢(效率)
+++++++++++++++++++++++++++++++++++++++++问题:通过SSH链接远程Linux主机过慢.重点:学习如何通过调整ssh_config配置文件,提高SSH连接效率.时 ...
- Γ(a) 的两种方差与均值
所以 这里是满足 Be(x+1,n-x+1),如果是要服从Be(a,b) 相应的后验概率