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

浙公网安备 33010602011771号