用CMakeLists.txt组织工程
1 一个工程会有多个CMakeLists.txt,如何组织这些CMakeLists.txt来构建一个工程?
1.1 最外层一个CMakeLists.txt,是总的CMakeList.txt,在这个里面用add_subdirectory来进入各个子目录
1.2 每个模块一个CMakeLists.txt
1.3 每个CMakeLists.txt中只设置一个目标
1.4 多使用cmake预定义的变量和命令使得自己的cmakelists有更高的可移植性
2 cmake是如何解析这些CMakeLists.txt文件的
向shell脚本一样,但是如果遇到add_subdirectory的话,就进入子目录处理里面的CMakeLists.txt文件,直到处理完再出来继续处理。
3 cmake命令不区分大小写,但是变量区分大小写
4 cmake生成动态库和静态库
4.1 cmake生成动态库
add_library的时候,在目标和src文件之间加上SHARED变量即可,就表示要生成动态库。
4.2 cmake生成静态库
add_library的时候,在目标和src文件之间加上STATIC变量即可。
5 cmake安装生成的动态库和静态库
5.1 cmake生成的目标文件的类型
archive,存档文件,静态库是archive文件。
library,库文件,模块库是library文件,非dll的so是library文件,而dll的话,dll部分是runtime文件,供链接的部分是archive文件。
runtime,可执行文件就是runtime的文件。
6 如何指定所有类型的生成文件到指定的目录
使用install命令
6.1 install命令是什么
install是cmake的命令,用来生成工程的安装规则。
6.2 install命令可以用来做什么
指定要安装的文件
指定安装的目录
指定安装文件的权限
6.3 安装头文件到指定目录
INSTALL(FILES hello.h DESTINATION include/hello)
6.4 安装动态库、静态库和可执行文件到指定目录
INSTALL(TARGETS hello LIBRARY DESTINATION bin)
INSTALL(TARGETS hello_static ARCHIVE DESTINATION lib)
INSTALL(TARGETS hell.exe RUNTIME DESTINATION bin)
7 cmake中常用的变量
7.1 CMAKE_SOURCE_DIR
根CMakeLists.txt文件所在的目录。
7.2 CMAKE_BINARY_DIR
in source build时,CMAKE_BINARY_DIR等于CMAKE_SOURCE_DIR,当外部编译时,即cmake命令执行的目录。
8 生成某个工程的目标文件时的固定的模式
第一步,使用project命令指定该project的名字。
第二步,使用include_directories指定头文件目录。
第三步,使用link_directories指定所要链接的库的地址。
第四步,使用add_executable/add_library指定所要生成的目标。
第五步,使用target_link_libraries指定目标所要链接的库的名字。
第三步必须要放在第四步的前面,这是cmake的一个设计得不好的地方。
9 修改了CMakeLists.txt之后最好是将build目录全部删掉,再执行cmake重新生成,否则会出现一些很奇怪的问题
用CMakeLists.txt组织工程的更多相关文章
- Linux c++ vim环境搭建系列(6)——CMakeLists.txt多文档多目录组织方法和编写示例
CMakeLists.txt学习 1. 概要 主要是关于cmakelists.txt的编写模板,和多文档多目录的组织方法详解, 涉及第三方库的添加使用方法. 这里主要介绍cmakelists.txt的 ...
- CMAKE 生成VS2008静态库工程 与 CMAKE使用,CMakeLists.txt编写总结
cmake -G"Visual Studio 9 2008 Win64" 以上命令得用cd命令切换到顶层CMakeLists.txt的当前目录,才能生效 以下是CMakeLists ...
- 工程下CmakeLists.txt
2.工程下Cmake 本小节的任务是让上一小结的程序更像一个工程: 为工程添加一个子目录 src,用来放置工程源代码 : 添加一个子目录doc,用来放置这个工程的文档 hello.txt: 在工程目录 ...
- JetSonNano darknet yolov3工程通过CMakeLists.txt配置编译环境
CMakeLists.txt 写的比较糙,有疑问欢迎咨询. option(GPU ON) option(CUDNN ON) option(OPENCV ON) cmake_minimum_requir ...
- 怎么写自己的CMakeLists.txt
一. 为什么要使用cmake 理论上说,任意一个C++程序都可以用g++来编译.但当程序规模越来越大时,一个工程可能有许多个文件夹和源文件,这时输入的编译命令将越来越长.通常一个小型C++项目可能含有 ...
- opencv3在CMakeLists.txt中的调用问题
在cmake工程中使用opencv需要在CMakeLists.txt文件中加以调用,在opencv2.xx版本,可以用以下语句 # 寻找OpenCV库 find_package( OpenCV REQ ...
- Ros学习——Cmakelists.txt文件解读
1.过程 .Required CMake Version (cmake_minimum_required) //CMake 需要的版本 .Package Name (project()) //#定义工 ...
- linux CMakeLists.txt 语法
CMake入门教程 参考文献:http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/index.html 官方网址:http://www.cmak ...
- make Makefile 与 cmake CMakeLists.txt
make Makefile 与 cmake CMakeLists.txt 大家都知道,写程序大体步骤为: 1.用编辑器编写源代码,如.c文件. 2.用编译器编译代码生成目标文件,如.o. 3.用链接器 ...
随机推荐
- Linux中查看某个软件的安装路径
Linux中查看某个软件的安装路径(地址)有时显得非常重要.比如某个文件的快速启动项被删除,或者你要建立快速启动项,或者想删除.添加安装文件等等,很多地方都要用到查案文件安装路径的命令. 这里给大家介 ...
- Hrbust 2319 Number Game(贪心)
题目链接 Hrbust 2319 首先把二元组排序,$ai$大的排前面,$ai$相同的$bi$大的排前面. 这样的话就满足了Kim的取数顺序,即选每次$ai$最大的. 考虑得坏一些,在$ai$相同的 ...
- weblogic内存快速配置
# IF USER_MEM_ARGS the environment variable is set, use it to override ALL MEM_ARGS values USER_MEM_ ...
- 洛谷——P1074 靶形数独
P1074 靶形数独 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z ...
- Eclipse4.4以上版本不能使用easyExplorer,采用OpenExplorer
如果想在Ecipse里打开目录,一直用easyExplorer,可是现在版本升级了easyExplorer不好使,可以用OpenExplorer到https://github.com/samsonw/ ...
- Inno Setup打包的安装程序在Vista/Win7上自动提示需要管理员权限的方法
来源:http://hi.baidu.com/jingrensoft/blog/item/c34575cfae4fb926f9dc617f.html 首先,在 [Setup]段 PrivilegesR ...
- [Js]删除数组指定元素
写在前面 在最近的项目中,有用到js对数组的操作,之前自己几乎没有用到这种方法,这里就记录一下,算是对学到的东西的一种总结吧. 数组对象splice方法 splice() 方法向/从数组中添加/删除项 ...
- Code signing is required for product type Unit Test Bundle in SDK iOS 8.0
I fixed the issue (temporarily) by going to Edit Scheme, then in the Build section, removing my unit ...
- [笔记]Android 源码编译
问题: 解决方法: 下载地址ftp://ftp.gnu.org/gnu/make/make3.8.2的安装步骤:tar -zxvf make3.8.2.tar.gz在make-3.8.2目录下./co ...
- django发送邮件配置
配置如下,settings中配置: EMAIL_HOST = 'smtp.163.com' EMAIL_PORT = '25' EMAIL_HOST_USER = 'contact108@163.co ...