CMake学习笔记(1)——用CMake编译一个hello world程序
来源:互联网 发布:最新的网络购物平台 编辑:程序博客网 时间:2024/06/06 00:47
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,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。
如果有嵌套目录,子目录下可以有自己的CMakeLists.txt。
总之,CMake是一个非常强大的编译自动配置工具,支持各种平台,KDE也是用它编译的,感兴趣的可以试用一下。
建立一个名为t1的工程:
编写main.c文件
#include <stdio.h>int main(){printf("hello world\n");return 0;}
编写一个CMakeLists.txt文件:
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:用于定义工程名字。这个指令隐式的定义了两个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:生成可执行文件,${}用来引用变量。
然后开始构建:
cmake .make
生成名为hello的可执行文件,执行:
./hello
hello world
前面的是内部编译,即直接在工程目录下进行构建,生成的中间文件也在工程目录下,这样显得很乱,下面介绍外部编译:
建立一个名为build的目录:
整个工程的目录结构如下:
t1├── build├── CMakeLists.txt└── main.c
进如build目录,进行构建:
cmake ..make..代表当前目录的父目录。
这样构建后生成的所有文件都会在build目录中。
0 0
- CMake学习笔记(1)——用CMake编译一个hello world程序
- 【WIN32】CMake的学习总结 1——一个简单的Hello World程序
- CMAKE 写hello world
- Cmake的Hello World
- 【使用CMake组织C++工程】1:CMake Hello World
- [unix]用cmake写hello world
- 实践cmake(1)--搭建hello world
- 【Cmake学习笔记】编译安装
- CMake学习笔记(2)——建立一个标准的工程和安装程序
- CMake学习笔记(二)——CMake语法
- 用Cmake 编译cuda程序
- cmake编译opencv程序
- cmake 编译OpenCV程序
- VRPN学习笔记(一) 用CMake配置和编译VRPN
- wcf学习笔记1 hello world程序
- CMake 学习笔记整理(1)
- NDK编译——CMake
- 用cmake编译gtk程序:gssdp
- 51nod 1019 逆序数<STL vector>
- 指针间接赋值的意义
- 安卓开发之自定义View通过Drawable绘制图标
- 【初探】排序算法
- UISearchBar
- CMake学习笔记(1)——用CMake编译一个hello world程序
- git学习笔记--时光穿梭机
- 维修道路 题解
- matlab-高数 求在(x0,y0)处偏导数 数值
- matlab-高数 高阶偏导数
- iOS/Swift跳转界面时隐藏tabBar的方法
- Linux常用命令(二)
- 第5.10节 输入命令行参数,运行程序
- Linux(Ubuntu14.04)下HelixServer的安装与配置