跳过正文
  1. Posts/

cmake 学习笔记

·889 字·2 分钟

前置技能点:

gnu make

linux下.so,.a,.o文件

cmake是一个工具,也可以看成一门语言。

学习cmake最大的障碍在于看不懂全是大写的英文

学习cmake主要参考了《cmake practice》

不过感觉作者有些啰嗦…不重要的东西讲了半天,重要的东西却一带而过,表述得也不是特别流畅。不过还是感谢作者的分享吧 orz

cmake的定位是大型项目构建工具。

目前适用于C/C++/JAVA的项目。

可以不需要自己写makefile文件。

既然cmake可以看做一门语言,那么自然就有语法。

下面只是列举一些常用的。不常用的可以用到的时候再去查。这里也会不定期补充。

cmake的语法中,对于变量大小写敏感,对于cmake的关键字大小写不敏感,不过习惯于全部大写。

cmake有两种编译方式,一种叫in source 编译(就是直接在工程目录编译)

一种叫out of source 编译,就是在工程目录下新建build,然后在build文件夹里编译。

一般都采用out of source的方式编译,这样可以使得编译得到的结果都存放在build文件夹里,不会和源代码混在一起。

set 命令用来定义变量:

1SET(HELLO_SRC main.SOURCE_PATHc)

然后就可以用 ${HELLO_SRC} 来引用这个变量了(例外:在 if 语句中,是直接使用变量名引用,而不需要 ${})。

ADD_EXECUTABLE 用来定义生成的可执行文件的名字:

1ADD_EXECUTABLE(hello SRC_LIST)

表示源文件是 SRC_LIST 中定义的源文件列表,生成一个文件名为 hello 的可执行文件。

如果有多个参数,可以写成:

1ADD_EXECUTABLE(hello main.c func.c)

或者

1ADD_EXECUTABLE(hello main.c;func.c)

ADD_SUBDIRECTORY 指令:

1ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

这个指令用于向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置。EXCLUDE_FROM_ALL 参数的含义是将这个目录从编译过程中排除,比如工程的 example,可能就需要工程构建完成后,再进入 example 目录单独进行构建(当然,你也可以通过定义依赖来解决此类问题)。

ADD_LIBRARY 指令:

ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC}) 生成动态(共享)库。

语法为:

1ADD_LIBRARY(libname
2 [SHARED|STATIC|MODULE]
3 [EXCLUDE_FROM_ALL]
4 source1 source2 ... sourceN)

常用到的是 SHARED 动态库、STATIC 静态库。

SET_TARGET_PROPERTIES:可以修改生成的库的名字

1SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")

INCLUDE_DIRECTORIES:添加头文件搜寻目录

LINK_DIRECTORIES:为 target 添加非标准的共享库搜索路径

相关文章

qt 5.x 初探 (5) 

·166 字·1 分钟
qt_5.9_ui_doc 还是比直接写代码方便点。。。所以不妨学习一个! 以及。。。qt在2017年6月1号发布了5.9。。。所以之前是5.8。。。现在变成5.9了。。。