技术分享
⛏️CMake学习(1)- 基本操作与命令
00 分钟
2023-4-11
2023-11-23
type
status
date
slug
summary
tags
category
icon
password
Email
文章首发于:My Blog 欢迎大佬们前来逛逛
初学者对于CMake学习的简单总结,大佬指点轻喷!!!!

1. 编写一个最简单的Cmake程序

1.1 GNU make

首先打开cmd窗口,在一个目录新创建一个文件夹:
linux中运行一下命令:
windows中运行一下命令
表示递归创建一个cmake文件夹与test1文件夹,其中test1就是我们的cmake项目文件夹,进入我们的测试文件夹中。
执行以下命令:(code打开vscode编辑器,你也可以使用vim)
然后为我们的第一个cmake项目编写一个源程序:
保存后退出。
然后编写一个名叫 CMakeLists.txt 的文件:
然后编写如下内容:
这些内容我们在之后都会解释
保存后退出。
然后创建一个文件夹:
表示我们的构建的项目的生成的文件都放在build文件夹这里。
然后执行以下命令:
在当前build文件夹中构建项目,使用的构建工具是MinGW makefiles,构建的是 .. 即上一级文件夹中的文件,构建后生成在build里面
表示使用MinGW 的 GNU Make工具构建项目,还有一个visual studio的 Borland Make 构建工具,不过那个工具构建CMake项目比较复杂,在这里就不说了。
然后成功的话,cmd中就会显示如下的内容:
然后我们就会发现,build里面多了很多文件与文件夹,其中最重要的是生成了一个Makefile
因此我们接下来执行如下命令:此时在build文件夹内
然后就会显示如下内容:
表示我们的项目构建完整,目标程序叫做 Hello ,可以发现它生成了一个 Hello.exe 的程序
然后我们就可以运行了:
这就完成了最简单的使用 MinGW的 GNU make工具构建的CMake项目的一个完整的过程。

1.1 Borland make

如果你想使用 Borland 的 make 工具,你可以按照以下步骤进行操作:
  1. 安装 Borland C++ 编译器,并将其添加到系统的 PATH 环境变量中。你需要确保在命令行中可以使用 bcc32 命令来编译 C++ 代码。
  1. 确认 Borland 的 make 工具已经包含在 Borland C++ 编译器中。在命令行中输入 make -v 命令来查看 make 版本信息。如果命令行中显示 “Borland Make Version X.XX” 或 “Embarcadero Make Version X.XX” 等信息,那么 Borland 的 make 工具已经包含在 Borland C++ 编译器中。
  1. 在项目根目录下创建一个名为 makefile.borland 的文件,并在该文件中编写 Borland makefile 的内容。Borland 的 makefile 与 GNU makefile 有所不同,因此你需要根据 Borland makefile 的语法规则编写相应的内容。以下是一个示例 makefile.borland 文件:
这个示例中,我们指定了编译器为 bcc32,编译选项为 -vG -w- -O2 -Iinclude,链接选项为 -vG -w- -Llib,链接的库为 mylib,目标文件为 myapp.exe,源代码文件为 main.cpp。你可以根据自己的项目需要进行相应的修改。 4. 在命令行中进入到项目根目录,执行 make -f makefile.borland 命令来编译项目。如果编译成功,你可以在当前目录下找到生成的可执行文件 myapp.exe。 注意事项:
  • Borland 的 make 工具与 GNU make 工具有所不同,具体的语法规则和使用方法可能会有所差异。你需要查阅 Borland 的 make 工具的文档来了解详细的信息。
  • 如果你同时安装了 GNU make 工具和 Borland C++ 编译器,需要确保在执行 make 命令时使用 Borland 的 make 工具。你可以使用 which make 命令来查看当前系统上的 make 工具路径,以确定使用的是哪个版本的 make 工具。如果该命令返回的路径指向 GNU make 工具,你需要执行 make -f makefile.borland 命令来使用 Borland 的 make 工具。

2. 简单解释

2.1 project

project指令用于定义工程名称,并且可以指定工程的语言,支持的语言列表是可选的,默认表示支持所有用语言。
其中projectname便是我们的工程的名称
同时这个名称与后面的两个变量是相互联系的:
我们的两个Message的指令就使用了这个project的名称,因此可以把Message的两个命令的前面指定与你的project设置的名字相同,比如:
不过如果需要改变project 的名字的时候,后续也需要修改此处,所以直接把他们声明为 PROJECT_BINARY_DIR 为妙。

2.2 set

set可以用来显式的定义变量。
我们可以使用set来包含多个源文件,比如我们用到了main.cpp,因此需要在set中指明包含这个源文件,同样如果需要多个源文件,则可以在后面添加多个。
定义变量:可以使用set命令来定义一个新的变量,并给它赋初值。例如:
这个命令将会定义一个名为SRC_FILES的变量,它的值为 main.cpp utils.cpp

2.3 message

message用于向终端输出用户定义的信息
包含以下三种类型:
  • SEND_ERROR:产生错误,生成过程被跳过
  • STATUS:输出前缀的信息
  • FATAL_ERROR:立即终止所有的CMake过程

2.4 add_executable

这个命令的作用是生成一个名称为hello的可执行文件,相关的源文件是 SRC_LIST中定义的变量,即你可以这样写:
在本例中,我们使用了 ${}引用变量,这是 cmake 的变量应用方式,但是也有一些例外,我们以后再说。
因此对于本例,我们可以缩写成这样一个最简单的版本:

3.基本语法规则

  1. 变量使用${}方式取值,但是在IF控制语句中直接取值
  1. 指令(参数1 参数2 ....),参数用空格或者分号分割
  1. 指令是大小写无关的,指令和变量是大小写相关的,但是推荐全部使用大写
  1. 作为工程名的HELLO和生成的可执行文件hello没有任何关系,你可以随意在ADD_EXECUTABLE中修改你的可执行文件的名字。
如果一个源文件的名字出现了空格: ma in.cpp那么推荐你使用 "" 将源文件包含进来。
使用以下的命令来清理工程:(在build文件夹中)
什么是out-of-source 外部编译
我们刚才举得例子就是外部编译的例子,即我们在项目目录test1中创建了一个build编译目录,因此所有的编译条件都发生在build中,对我们的test1项目文件夹没有任何影响。

评论
  • Twikoo
  • Valine