PROJECT
格式:PROJECT(projectname [CXX] [C] [Java])
定义工程名称,指定工程支持的语言,支持的语言列表可以忽略,默认情况表示支持所有语言。这个指令隐式的定义了两个 cmake 变量:<projectname>_BINARY_DIR
以及<projectname>_SOURCE_DIR
。内部编译的话两个变量都是指向工程所在路径。工程名一般大写。
预定义变量
PROJECT_BINARY_DIR
和PROJECT_SOURCE_DIR
是cmake系统预定义变量,值分别跟<projectname>_BINARY_DIR
以及<projectname>_SOURCE_DIR
一致。
SET
格式:SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
显式定义变量。引用变量的方式为${...}
,但有一些例外,比如在 IF 控制语句,变量是直接使用变量名引用,而不需要${}。
MESSAGE
格式:MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" ...)
向终端输出用户定义的信息,包含了三种类型:SEND_ERROR
:产生错误,生成过程被跳过。SATUS
:输出前缀为—的信息。FATAL_ERROR
:立即终止所有 cmake 过程。
ADD_EXECUTABLE
格式:ADD_EXECUTABLE(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 [source2 ...])
生成可执行文件,注意:工程名与可执行文件名没有任何关系。
基本语法规则
1、变量使用${}方式取值,但是在 IF 控制语句中是直接使用变量名。
2、指令(参数1 参数2…)
参数使用括弧括起,参数之间使用空格或分号分开。
3、指令是大小写无关的,参数和变量是大小写相关的。推荐全部使用大写指令。
4、参数可使用双引号。
内部编译/内部构建
编译方式:在工程目录中执行cmake .
。
源文件、CMakeLists.txt都在工程目录中,生成的中间文件、Makefile等都在本目录中。生成一些无法通过使用make distclean自动删除的中间文件(因为无法跟踪)。