CMake学习笔记(1)——用CMake编译一个hello world程序

https://blog.csdn.net/bobsweetie/article/details/51762993

注意:
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目录中。

猜你喜欢

转载自blog.csdn.net/chengde6896383/article/details/81327194