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是一个常用的关键字,用于设置变量的值。它的基本语法如下:

SET(variable value [CACHE type docstring [FORCE]])

 

其中,variable是要设置的变量名,value是变量的值。CACHE、docstring和FORCE是可选参数。

  • CACHE:指定变量的类型,可选值包括STRING、PATH、FILEPATH、BOOLEAN、INTEGER、DOUBLE等,默认为STRING。CACHE类型的变量会被保存在CMake缓存中,以便下次使用时读取。
  • docstring:变量的文档字符串,用于描述变量的用途和取值范围等信息。
  • FORCE:表示强制设置变量的值,即使变量已经存在且被标记为“不缓存”(即CACHE变量的FORCE标志为OFF)。 例如:
SET(SRC_LIST foo.cpp bar.cpp)

上述代码设置了一个名为SRC_LIST的变量,它的值是"foo.cpp bar.cpp"。

除此之外,SET关键字还可以用于定义宏或函数,例如:

SET(MY_MACRO(arg) message("Hello, ${arg}!"))

上述代码定义了一个名为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

 

posted @ 2023-06-04 01:19  多一些不为什么的坚持  阅读(19)  评论(0编辑  收藏  举报