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 工具,你可以按照以下步骤进行操作:
- 安装 Borland C++ 编译器,并将其添加到系统的 PATH 环境变量中。你需要确保在命令行中可以使用
bcc32
命令来编译 C++ 代码。
- 确认 Borland 的 make 工具已经包含在 Borland C++ 编译器中。在命令行中输入
make -v
命令来查看 make 版本信息。如果命令行中显示 “Borland Make Version X.XX” 或 “Embarcadero Make Version X.XX” 等信息,那么 Borland 的 make 工具已经包含在 Borland C++ 编译器中。
- 在项目根目录下创建一个名为
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.基本语法规则
- 变量使用
${}
方式取值,但是在IF控制语句中直接取值
- 指令(参数1 参数2 ....),参数用空格或者分号分割
- 指令是大小写无关的,指令和变量是大小写相关的,但是推荐全部使用大写
- 作为工程名的HELLO和生成的可执行文件hello没有任何关系,你可以随意在ADD_EXECUTABLE中修改你的可执行文件的名字。
如果一个源文件的名字出现了空格:
ma in.cpp
那么推荐你使用 ""
将源文件包含进来。使用以下的命令来清理工程:(在build文件夹中)
什么是
out-of-source 外部编译
?我们刚才举得例子就是外部编译的例子,即我们在项目目录
test1
中创建了一个build
编译目录,因此所有的编译条件都发生在build中,对我们的test1项目文件夹没有任何影响。- 作者:Yuleo
- 链接:https://www.helloylh.com/article/459aaabb-8c7a-47a4-a75b-8f363b263dbd
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。