从hello world开始
最基础的使用和语法
cmake的编译过程使用名为CmakeLists.txt的文件进行控制,该文件包含着使用cmake语言描述的项目信息, cmake语言通过一些命令起作用,在cmake执行时,每个命令按照文件中声明的顺序进行执行,命令的形式形如:
command(args …)
cmake的命令名称是大小写不敏感的(从v2.2版本开始,老版本只支持全大写),同时cmake支持一些简单的变量, 例如数字、字符串或字符串列表等等,变量通过${VAR}进行引用,多个参数可以通过set命令存入一个变量中形成列表,例如:
set(FOO A B C)
这个时候FOO变量代表着A、B、C三个变量组合形成的列表,在使用时,下面两种形式是等价的:
command(${FOO}) command(A B C)
假如需要给列表或变量添加双引号,则如下所示:
command(${FOO}) command(“A B C”)
系统的环境变量和注册表项的值也可直接在cmake中使用,如下:
$ENV{VAR} [HKEY_CURRENT_USER\Software\path1\path2;key]
hello world工程的CMakeLists文件
当Hello项目内只有一个hello.c文件时,hello.c文件内容如下:
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
则编译所使用的Cmake文件如下:
project (Hello)
add_executable (Hello hello.c)
以上是一个最简单的情况,接下来让我们看一个稍微复杂一点的例子:
cmake_minimum_required(2.6)
project(Hello)
set(HELLO_SRCS hello.c File2.c File3.c)
if (WIN32)
set(HELLO_SRCS ${HELLO_SRCS} WinSupport.c)
else ()
set(HELLO_SRCS ${HELLO_SRCS} LinuxSupport.c)
endif()
add_executable(Hello ${HELLO_SRCS})
find_library (TCL_LIBRARY
NAMES tcl tcl84 tcl83 tcl82 tcl80
PATHS /usr/lib /usr/local/lib
)
if(TCL_LIBRARY)
target_link_library (Hello ${TCL_LIBRARY})
endif ()
cmake核心概念
三大核心概念间的关系
cmake有三个关键概念:target、generator和command,我们