目录
学习通道:从零开始详细介绍CMake
Cmake下载地址:下载地址
Cmake官网:官网
PROJECT关键字
可以用来指定工程的名字和支持的语言,默认支持所有语言
PROJECT(HELLO)指定了工程的名字,并且支持所有语言——建议
PROJECT(HELLO CXX)指定了工程的名字,并且支持的语言是C++
PROJECT(HELLO C CXX)指定了工程的名字,并且支持的语言是C和C++
该指定定义了两个CMAKE的变量HELLO_BINARY_DIR、HELLO_SOURCE_DIR
MESSAGE关键字就可以定义直接使用者的两个变量,当前都指向当前的工作目录。
问题:如果修改了工程名,这两个变量名也会随之改变
解决:再定义两个预定义变量:PROJECT_BINARY_DIR、PROJECT_SOURCE_DIR,这两个变量和HELLO_BINARY_DIR、HELLO_SOURCE_DIR是一致的。所以改变
SET关键字
用来显示指定变量
SET(SRC_LIST main.cpp)SRC_LIST变量就包含了main.cpp
也可以包含多个cpp文件, SET(SRC_LIST main.cpp main1.cpp main2.cpp)
MESSAGE关键字
向终端输出用户自定义的信息
主要包含三种信息:
SEND_ERROR,产生错误,生成过程被跳过。
SATUS,输出前缀为一的信息。
FATAL_ERROR,立即终止所有cmake过程。
ADD_EXECUTABLE关键字
生成可执行文件
ADD_EXECUTABLE(hello ${SRc_LIST})生成的可执行文件名是hello,源文件读取变量 SRC_LIST中的内容,也可以直接写成 ADD_EXECUTABLE(hello main.cpp)
注意:工程名的HELLO和生成的可执行文件hello是没有任何关系的
语法的基本原则
变量使用${}方式取值,但是在IF控制语句中是直接使用变量名
指令(参数1 参数2 。。。)参数使用括弧括起来,参数之间使用空格或分号分开。以ADD_EXECUTABLE指令为例,如果存在另一个func.cpp源文件,就要写成:ADD_EXECUTABLE(hello main.cpp func.cpp)或者ADD_EXECUTABLE(hello main.cpp;func.cpp)
指令是大小写无关的,参数和变量是大小写相关的,但是推荐全部使用大写指令
语法注意事项
SET(SRC_LIST mian.cpp)可以写成SET(SRC_LIST "mian.cpp")。如果源文件名中含有空格,就必须要加双引号
ADD_EXECUTABLE(hello main)后缀可以不加,他会自动去找.c和.cpp,但是最好不要这样去写,因为可能会有两个文件main.cpp和main
内部构建和外部构建
上述是内部构建,产生的临时文件特别多,不方便清理
外部构建,就会把生成的临时文件放在build目录下,不会对源文件有任何影响,所以强烈建议使用外部构建的方法!
外部构建方式举例
1、在当前目录下创建一个build目录
2、进入build,运行指令cmake .. (表示上一级目录),或者是CMakeLists.txt锁在的绝对路径,这样生成的文件都在build目录下了
3、在build目录下,运行make来构建工程