1.0 初识CMake

1.0.1 引入

  本节选择了一个最简单的例子Helloworld来演练一下cmake的完整构建过程,本节并不会深入的探讨cmake,仅仅展示一个简单的例子,并加以粗略的解释。我们选择了

Everest Linux作为基本开发平台,因为这个只有一张CD的发行版本,包含了gcc-

4.2/gtk/qt3/qt4等完整的开发环境,同时,系统默认集成了cmake最新版本2.4.6。

1.0.2 第一个CMake程序

  1.0.2.1 在自己电脑的桌面上上新建一个CMakeDemo的文件夹,这个文件夹可以用来存储我们每一节所讲的内容的具体代码,之后在这个文件夹中创建一个t1文件夹,用来存放项目所要用到的文件

  1.0.2.2 在刚刚创建好的t1文件夹中新建一个main.c的源代码和CMakeLists.txt的两个文件

      对于这两个文件,只有CMakeLists.txt是要严格区分大小写的,因为你可以理解为,你在使用CMake的时候,CMake只会读取这个文件来分析你的工程和工程

      之间的关系

  1.0.2.3 在main.c中自己写上经典的hell,CMake的输出语句

//main.c
#include<stdio.h>
int main()
{
      printf("Hello,CMake!");
      return 0;      
}

  1.0.2.4 在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})

  1.0.2.5 接下来我们构建这个工程,在t1目录中打开terminal,输入cmake .\

      cmake .\则表示我要在当前目录中寻找CMakeLists.txt进行构建工程的操作,之后会输出下面的内容

 

  我们只需要看最后的倒数第二行输出了Generating done就知道生成成功了

  1.0.2.6 回到t1文件夹,我们可以很容易看到有一个HELLO.sln的Visual Studio的工程文件,我们打开它就可以正式开始构建工程了

   这里总结一下刚刚所学的几个CMake命令

  需要注意的是,CMake的这些指令是不区分大小写的,也就是说,你写PROJECT和写project和写ProJeCt都是一样的

  1.PROJECT命令

    1.1 该PROJECT(arg1 arg2 arg3 argn)命令

    arg1表示工程的名字,工程的名字只能有一个,后面的arg2,arg3,argn则表示该工程是用什么语言来编写的(可以是C,C++,Java都可以)我们可以不去指定它(不指定)的情况下就表示支持所有的的语言

    1.2 一旦我们定义了工程名称,那么CMake会隐式生成两个变量:

      工程名称_BINARY_DIR

      工程名称_SOURCE_DIR

      实际上在本案例中,这两个变量HELLO_BINARY_DIR和HELLO_SOURCE_DIR的路径就是t1文件夹的绝对路径

  2.SET命令

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

       2.1.1 VAR就是要设置的变量的名称.后面的就是变量的值,在本例中,SRC_LIST变量的值就是main.c

       2.1.1 如果VAR可以代表多个变量的名称,那么就可以是SET(VAR main.c t1.c t2.c t3.c ...)

       2.1.3 如果我的.c文件的名字里面带有空格,怎么办?(比如hello world.c),那么就需要加""了,就像这样子

          SET(SRC_FILE "hello world.c")

  3.MESSAGE命令

    3.1 MESSAGE命令类似于C语言的printf函数,是用来输出信息的,但这个MESSAGE更高级

      MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display"...)

      SEND_ERROR表示如果生成出错则跳过继续生成

      STATUS表示输出的信息前面加--前缀

      FATAL_ERROR则表示生成出错时,立即终止

      MESSAGE命令的第一个参数只能是上面3个之一

  4.ADD_EXECUTABLE(execfilename srcfile)

    4.1 该ADD_EXECUTABLE命令用于通过srcfile来输出一个可执行文件(可执行文件的名字叫execfilename)

    4.2 如果srcfile是一个CMake变量,那么srcfile就得写为${srcfile},如果你想直接简单粗暴用文件名称,也是可以的,比如:

      ADD_EXECUTABLE(hello main.c)

      和

      SET(SRC_FILE main.c)

      ADD_EXECUTABLE(hello ${SRC_FILE})

 

posted @ 2023-09-18 14:40  蜡笔小新Pointer  阅读(20)  评论(0)    收藏  举报