1、cmake学习
参考资料:
02-CMake的HelloWord编译_哔哩哔哩_bilibili
1、在Linux上安装cmake
2、写一个c++程序
#include <iostream> int main(){ std::cout<<"Hello world!"<<std::endl; return 0; }
3、写一个CMakeLists.txt
#CMakeLists.txt PROJECT (HELLO) SET(SRC_LIST main.cpp) MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR}) MESSAGE(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})
4、使用命令cmake .和 make
5、关于一些语法的介绍
PROJECT是一个重要的关键字,用于指定或定义一个CMake项目。它的基本语法如下:
PROJECT(projectname [CXX] [C] [Java])
其中,projectname是项目的名称,可以是任何合法的字符串。CXX、C和Java是可选参数,用于指定项目的语言类型,如果不指定,默认为CXX。 在CMakeLists.txt文件中使用PROJECT关键字后,CMake会自动生成一些默认的变量和规则,如:
- PROJECT_NAME:项目的名称,与指定的projectname参数相同。
- PROJECT_SOURCE_DIR:项目源码目录的绝对路径。
- PROJECT_BINARY_DIR:项目编译目录的绝对路径。
- CMAKE_PROJECT_NAME:与PROJECT_NAME相同。
- CMAKE_PROJECT_VERSION:项目的版本号,默认为1.0。
除此之外,PROJECT关键字还可以用于指定其他项目信息,如版本号、描述等。例如:
PROJECT(MyProject VERSION 1.0 DESCRIPTION "A sample project")
上述代码指定了项目的名称为MyProject,版本号为1.0,描述为"A sample project"。这些信息可以在生成的Makefile或IDE项目中使用。 总之,PROJECT关键字是定义CMake项目的关键步骤之一,它自动生成了一些默认变量和规则,方便用户进行后续的构建和开发工作。
在CMakeLists.txt文件中,SET是一个常用的关键字,用于设置变量的值。它的基本语法如下:
其中,variable是要设置的变量名,value是变量的值。CACHE、docstring和FORCE是可选参数。
- CACHE:指定变量的类型,可选值包括STRING、PATH、FILEPATH、BOOLEAN、INTEGER、DOUBLE等,默认为STRING。CACHE类型的变量会被保存在CMake缓存中,以便下次使用时读取。
- docstring:变量的文档字符串,用于描述变量的用途和取值范围等信息。
- FORCE:表示强制设置变量的值,即使变量已经存在且被标记为“不缓存”(即CACHE变量的FORCE标志为OFF)。 例如:
上述代码设置了一个名为SRC_LIST的变量,它的值是"foo.cpp bar.cpp"。
除此之外,SET关键字还可以用于定义宏或函数,例如:
上述代码定义了一个名为MY_MACRO的宏,它接受一个参数arg,并输出"Hello, arg!"的消息。
总之,SET关键字是CMake中用于设置变量或定义宏/函数的重要关键字之一。
它可以用于设置任何类型的变量,并支持缓存和文档字符串等高级功能,方便用户进行自定义配置和构建。
MESSAGE关键字
向终端输出⽤户⾃定义的信息
主要包含三种信息:
SEND_ERROR,产⽣错误,⽣成过程被跳过。
SATUS,输出前缀为—的信息。
FATAL_ERROR,⽴即终⽌所有 cmake 过程.
在CMakeLists.txt文件中,ADD_EXECUTABLE是一个常用的关键字,用于定义一个可执行文件的构建规则。它的基本语法如下:
ADD_EXECUTABLE(executable_name source_file1 [source_file2 ...])
其中,executable_name是要生成的可执行文件的名称,source_file1、source_file2等是生成可执行文件所需的源代码文件,可以有多个。 例如:
ADD_EXECUTABLE(hello_world main.cpp greeting.cpp)
上述代码定义了一个名为hello_world的可执行文件,它的源代码包括main.cpp和greeting.cpp两个文件。 在CMakeLists.txt文件中使用ADD_EXECUTABLE关键字后,
CMake会自动根据指定的源代码文件生成相应的构建规则,并生成Makefile或其他构建系统需要的文件。
使用生成的构建系统文件进行编译后,可在构建目录下生成可执行文件。
如果需要将可执行文件安装到系统目录中,可以使用INSTALL关键字进行配置。
总之,ADD_EXECUTABLE关键字是CMake中用于定义可执行文件构建规则的重要关键字之一。
它可以根据指定的源代码文件自动生成构建规则,方便用户进行编译和构建工作。
6、语法的基本原则
- 变量使⽤${}⽅式取值,但是在 IF 控制语句中是直接使⽤变量名
- 指令(参数 1 参数 2...) 参数使⽤括弧括起,参数之间使⽤空格或分号分开。 以上⾯的 ADD_EXECUTABLE 指令 为例,如果存在另外⼀个 func.cpp 源⽂件 就要写成:ADD_EXECUTABLE(hello main.cpp func.cpp)或者ADD_EXECUTABLE(hello main.cpp;func.cpp)
- 指令是⼤⼩写⽆关的,参数和变量是⼤⼩写相关的。但,推荐你全部使⽤⼤写指令
7、语法注意事项
- SET(SRC_LIST main.cpp) 可以写成 SET(SRC_LIST “main.cpp”),如果源⽂件名中含有空格,就必须要加双引 号
- ADD_EXECUTABLE(hello main) 后缀可以不⾏,他会⾃动去找.c和.cpp,最好不要这样写,可能会有这两个⽂ 件main.cpp和main
1111111111