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. MySQL常见注意事项及优化

    MySQL常见注意事项 模糊查询 like 默认是对name字段建立了索引 注意:在使用模糊查询的时候,当% 在第一个字母的位置的时候,这个时候索引是无法被使用的.但是% 在其他的位置的时候,索引是可 ...

  2. Google Cloud服务免费申请试用以及使用教程

    简介 Google Cloud Platform lets you build and host applications and websites, store data, and analyze ...

  3. black hack

    黑客技 关于在不知道系统的情况下 long long 的使用时 那么 #ifdef WIN32 #define LL "%I64d" #else #define LL " ...

  4. Java中final和static关键字总结

    1.final: final关键字可用于类.方法.变量前. final修饰的类不可被继承,例如java.lang.Math就是一个 final类,不可被继承. final修饰变量,在显示初始化后不可改 ...

  5. Storage protocol stacks

    http://brasstacksblog.typepad.com/brass-tacks/ http://brasstacksblog.typepad.com/brass-tacks/2016/02 ...

  6. IOS开发self.的用法总结

    如果声明的是retain类型的,然后使用self.的话此时引用计数会加1,变成1,如果同时又使用了alloc,那么引用计数又加一变成了2,那么如果只是release一次的话就会内存泄漏. 这种情况下的 ...

  7. 【转】.net 经典面试题

    [转].net 经典面试题  1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问.  ...

  8. 【IntelliJ IDEA】代码中出现Usage of API documented as @since 1.8+ more..

    在idea中写代码过程中.有这种报错出现: Usage of API documented as @since 1.8+ more.. 修改JDK版本的几个地方 最后,在pom.xml文件中添加: & ...

  9. 用PROXYCHAINS实现SSH全局代理

    NUX下可以实现SSH全局代理的软件有tsocks和proxychains两种,但是个人感觉proxychains要更加稳定简单. $ yum install proxychains # vim /e ...

  10. vue v-for与v-if组合使用

    当它们处于同一节点,v-for 的优先级比 v-if 更高,这意味着 v-if 将分别重复运行于每个 v-for 循环中.当你想为仅有的_一些_项渲染节点时,这种优先级的机制会十分有用,如下: < ...