博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CMake学习笔记(1)——用CMake编译一个hello world程序
阅读量:2383 次
发布时间:2019-05-10

本文共 1352 字,大约阅读时间需要 4 分钟。

注意:

CMakeLists.txt中message 输出的消息是在执行cmake的时候输出到终端的。
eg:
执行cmake .

 

CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。

通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。

如果有嵌套目录,子目录下可以有自己的CMakeLists.txt。

总之,CMake是一个非常强大的编译自动配置工具,支持各种平台,KDE也是用它编译的,感兴趣的可以试用一下。

建立一个名为t1的工程:

编写main.c文件

  1. #include <stdio.h>

  2.  
  3. int main()

  4. {

  5. printf("hello world\n");

  6.  
  7. return 0;

  8. }

编写一个CMakeLists.txt文件:

  1. PROJECT(HELLO)

  2. SET(SRC_LIST main.c)

  3. MESSAGE(STATUS "THIS IS BINARY DIR " ${HELLO_BINARY_DIR})

  4. MESSAGE(STATUS "THIS IS SOURCE DIR " ${HELLO_SOURCE_DIR})

  5. ADD_EXECUTABLE(hello ${SRC_LIST})

解释:

PROJECT:用于定义工程名字。这个指令隐式的定义了两个cmake变量:<projectname>_BINARY_DIR 以及<projectname>_SOURCE_DIR,这两个变量分别指定了编译后二进制文件的路径和工程源文件的路径。在这里时HELLO_BINARY_DIR和HELLO_SOURCE_DIR ,可以直接使用PROJECT_BINARY_DIR,PROJECT_SOURCE_DIR,这样改变工程文件名不需要修改这些变量;

SET:用于定义变量,这里是将SRC_LIST;

MESSAGE:用于在终端打印给用户信息;

ADD_EXECUTABLE:生成可执行文件,${}用来引用变量。

然后开始构建:

  1. cmake .

  2. make

生成名为hello的可执行文件,执行:

./hello

 

得到输出:

hello world

 

前面的是内部编译,即直接在工程目录下进行构建,生成的中间文件也在工程目录下,这样显得很乱,下面介绍外部编译:

建立一个名为build的目录:

整个工程的目录结构如下:

  1. t1

  2. ├── build

  3. ├── CMakeLists.txt

  4. └── main.c

进如build目录,进行构建:

  1. cmake ..

  2. make

..代表当前目录的父目录。

这样构建后生成的所有文件都会在build目录中。

你可能感兴趣的文章
yii框架在layout模式下,模版和layout文件的渲染顺序
查看>>
php5对象复制、clone、浅复制与深复制
查看>>
php设计模式
查看>>
git与github在ubuntu下的使用
查看>>
css pie.htc使用总结
查看>>
python包含中文字符串长度
查看>>
sysbench 0.5 性能测试工具使用手册
查看>>
通过telnet连接查看memcache服务器
查看>>
django不用在数据库中创建新的user表而使用它的后台管理功能
查看>>
php array_unshift()修改数组key
查看>>
mysql性能优化-查询(Query)优化-2
查看>>
MySQL分区表的使用
查看>>
MongoDB 地理位置索引的实现原理
查看>>
MongoDB与MySQL的插入、查询性能测试
查看>>
深入理解OAuth2.0协议
查看>>
https原理:证书传递、验证和数据加密、解密过程解析
查看>>
MySQL在大型网站的应用架构演变
查看>>
sphinx教程1__mysql sphinx引擎插件式热安装
查看>>
sphinx教程2__安装、配置和使用
查看>>
ttserver 缓存使用和过期设置
查看>>