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组织工程的更多相关文章

  1. Linux c++ vim环境搭建系列(6)——CMakeLists.txt多文档多目录组织方法和编写示例

    CMakeLists.txt学习 1. 概要 主要是关于cmakelists.txt的编写模板,和多文档多目录的组织方法详解, 涉及第三方库的添加使用方法. 这里主要介绍cmakelists.txt的 ...

  2. CMAKE 生成VS2008静态库工程 与 CMAKE使用,CMakeLists.txt编写总结

    cmake -G"Visual Studio 9 2008 Win64" 以上命令得用cd命令切换到顶层CMakeLists.txt的当前目录,才能生效 以下是CMakeLists ...

  3. 工程下CmakeLists.txt

    2.工程下Cmake 本小节的任务是让上一小结的程序更像一个工程: 为工程添加一个子目录 src,用来放置工程源代码 : 添加一个子目录doc,用来放置这个工程的文档 hello.txt: 在工程目录 ...

  4. JetSonNano darknet yolov3工程通过CMakeLists.txt配置编译环境

    CMakeLists.txt 写的比较糙,有疑问欢迎咨询. option(GPU ON) option(CUDNN ON) option(OPENCV ON) cmake_minimum_requir ...

  5. 怎么写自己的CMakeLists.txt

    一. 为什么要使用cmake 理论上说,任意一个C++程序都可以用g++来编译.但当程序规模越来越大时,一个工程可能有许多个文件夹和源文件,这时输入的编译命令将越来越长.通常一个小型C++项目可能含有 ...

  6. opencv3在CMakeLists.txt中的调用问题

    在cmake工程中使用opencv需要在CMakeLists.txt文件中加以调用,在opencv2.xx版本,可以用以下语句 # 寻找OpenCV库 find_package( OpenCV REQ ...

  7. Ros学习——Cmakelists.txt文件解读

    1.过程 .Required CMake Version (cmake_minimum_required) //CMake 需要的版本 .Package Name (project()) //#定义工 ...

  8. linux CMakeLists.txt 语法

    CMake入门教程 参考文献:http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/index.html 官方网址:http://www.cmak ...

  9. make Makefile 与 cmake CMakeLists.txt

    make Makefile 与 cmake CMakeLists.txt 大家都知道,写程序大体步骤为: 1.用编辑器编写源代码,如.c文件. 2.用编译器编译代码生成目标文件,如.o. 3.用链接器 ...

随机推荐

  1. iOS9.0 友盟分享详细过程

    一: 申请友盟的AppKey(友盟的Key是根据应用的名称生成的!) 在友盟注册了你自己的开发者账号后就可以申请AppKey了.然后在这个方法里面设置Key - (BOOL)application:( ...

  2. First Bad Version - LeetCode

    You are a product manager and currently leading a team to develop a new product. Unfortunately, the ...

  3. 序列文件(seq_file)接口

    转载:http://blog.csdn.net/gangyanliang/article/details/7244664 内容简介: 本文主要讲述序列文件(seq_file)接口的内核实现,如何使用它 ...

  4. GLSL纹理贴图 【转】

    转载:http://blog.csdn.net/hgl868/article/details/7872466 简单的纹理贴图(Simple Texture) 为了在GLSL中应用纹理,我们需要访问每个 ...

  5. 初始----python数字图像处理--:环境安装与配置

    一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...

  6. Vbs脚本经典教材

    转载:http://www.cnblogs.com/BeyondTechnology/archive/2011/01/10/1932440.html Vbs脚本经典教材(最全的资料还是MSDN) —为 ...

  7. html5,audio音乐播放器

    最终,做了自己原来一直想要实现的事儿.得出的结果是,有些事儿一旦開始做了,那么它就并非非常难. 如今的我,正听着自己的播放器放出的<光辉岁月>写这篇周六清晨的博文.写的不是非常好.但也请各 ...

  8. 【Excle数据透视】如何创建一个数据透视表

    数据透视表可以汇总.分析.浏览和提供工作表数据或外部数据源的汇总数据 创建方法一 通过”插入”创建,具体操作请看下图: 创建方法二 通过快捷键创建 使用[ALT+D+P]创建 首先按下alt键,然后依 ...

  9. 数据存储之Archiver、Unarchiver、偏好设置

    数组的归档 对象的归档 NSData多个对象的归档 NSArray多个对象的归档 偏好设置的存储 1.NSString.NSDictionary.NSArray.NSData.NSNumber等类型的 ...

  10. Windows Thin PC体验 & 语言包更改(win 7 included)

    本作品由Man_华创作,采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可.基于http://www.cnblogs.com/manhua/上的作品创作. 简介: Window ...