Cmake 学习实践 总结教程 - 第一小节 初识cmake

cmake

初识 cmake helloworld

PROJECT (HELLO)
SET(SRC_LIST main.c)
MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello SRC_LIST)

PROJECT 指令得语法是:

PROJECT(projectname [CXX] [C] [Java])

这个指令隐式的定义了两个 cmake 变量:

_BINARY_DIR 以及_SOURCE_DIR

同时 cmake 系统也帮助我们预定义了 PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR

变量,他们的值分别跟 HELLO_BINARY_DIR 与 HELLO_SOURCE_DIR 一致

SET 指令的语法是:

SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])

SET 指令可以用来显式的定义变量

MESSAGE 指令的语法是:

MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] “message to display” …)

SEND_ERROR,产生错误,生成过程被跳过。

SATUS,输出前缀为—的信息。FATAL_ERROR,立即终止所有 cmake 过程.

FATAL_ERROR,立即终止所有 cmake 过程.

ADD_EXECUTABLE(hello ${SRC_LIST})

定义了这个工程会生成一个文件名为 hello 的可执行文件,相关的源文件是 SRC_LIST 中

定义的源文件列表, 本例中你也可以直接写成 ADD_EXECUTABLE(hello main.c)。

注:

在本例我们使用了${}来引用变量,这是 cmake 的变量应用方式,但是,有一些例外,比

如在 IF 控制语句,变量是直接使用变量名引用,而不需要 。 如 果 使 用 了 {}。如果使用了 使{}去应用变

量,其实 IF 会去判断名为${}所代表的值的变量,那当然是不存在的了。

基本语法规则

1,变量使用${}方式取值,但是在 IF 控制语句中是直接使用变量名

2,指令(参数 1 参数 2…)

参数使用括弧括起,参数之间使用空格分号分开。

3,指令是大小写无关的,参数和变量是大小写相关的。但,推荐你全部使用大写指令。

4、这里需要特别解释的是作为工程名的 HELLO 和生成的可执行文件 hello 是没有任何关系的。hello 定义了可执行文件的文件名,你完全可以写成:ADD_EXECUTABLE(t1 main.c)编译后会生成一个 t1 可执行文件。

5,关于语法的疑惑 SET(SRC_LIST main.c)也可以写成 SET(SRC_LIST “main.c”) 是没有区别的,但是假设一个源文件的文件名是 fu nc.c(文件名中间包含了空格)。 这时候就必须使用双引号,如果写成了 SET(SRC_LIST fu nc.c),就会出现错误,提示 你找不到 fu 文件和 nc.c 文件。这种情况,就必须写成: SET(SRC_LIST “fu nc.c”)

清理工程

跟经典的 autotools 系列工具一样,运行: make clean 即可对构建结果进行清理。

内部构建与外部构建:

新建build目录 cmake … 称之为外部构建。使工程看起来更整洁。

通过外部编译进行工程构建,HELLO_SOURCE_DIR 仍然指代工程路径,即 /backup/cmake/t1

而 HELLO_BINARY_DIR 则指代编译路径,即/backup/cmake/t1/build

值得注意的是 cmake 没有像automake 一样的 make distclean 指令,来清理中间文件。

下一节,我们的任务是让 HelloWorld 看起来更像一个工程。
后续更新。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值