Makefile相关依赖
MinGW
MinGW(Minimalist GNU for Windows)
是一个用于Windows系统的开源软件开发工具集,它允许你在Windows
平台上使用GNU工具集
来编译、链接和运行原生Windows
程序。MinGW
提供了GCC(GNU Compiler Collection)编译器
以及其他常用的GNU工具
,如链接器、调试器等,使得开发者能够在Windows
上编写和运行使用C
、C++
等语言编写的程序。
MinGW的主要特点包括:
- 跨平台兼容性:
MinGW
允许开发者在Windows
上编写和编译与GNU/Linux
平台兼容的程序,从而更容易实现跨平台开发。 - 开源和免费:
MinGW
是一个开源项目,其源代码可以自由获取和修改。同时,它也是一个免费工具集,用户可以无需支付任何费用即可使用。 - 集成度高:
MinGW
集成了GCC
编译器、链接器、调试器等一系列开发工具,使得开发者可以在一个统一的环境中完成程序的开发、编译和调试。 - 易于使用:
MinGW
的安装和配置相对简单,开发者可以快速地将其集成到他们的开发环境中。
windows11安装教程
Windows11配置MinGW
Makefile文件
用Make工具
编译源文件时,需要编写Makefile
文件。Makefile
是用于自动化编译和构建项目的文件,特别是在 C
和 C++
等编译型语言中。它包含了一系列的规则,这些规则定义了如何从源代码文件生成可执行文件或库文件,以及这些文件之间的依赖关系。
Makefile
通常包含以下几个部分:
命名 | 解释 |
---|---|
变量定义 | 用于存储编译选项、源文件列表等 |
目标定义 | 描述要构建的目标(如可执行文件)及其依赖关系 |
规则 | 定义如何从源文件生成目标文件,以及如何编译这些源文件 |
- 规则如下:
目标target...:依赖dependencies...命令command1命令command2...
命名 | 解释 |
---|---|
target | 是规则生成的目标,可以是可执行文件或库文件等 |
dependencies | 是target生成所依赖的文件或其他目标 |
command | 是需要执行的命令,需要用TAB键来缩进 |
编写源文件
main.cpp
文件
#include <iostream>
#include "hello.hpp"int main(){std::cout << "this is c++ main function!" << std::endl;hello();return 0;
}
hello.cpp
文件
源文件:
#include <iostream>
#include "hello.hpp"int hello(){std::cout << "i love c++" << std::endl;return 0;
}
hello.hpp
头文件:
int hello();
gcc编译(c++用g++编译)源文件
- 查看当前目录下文件:
ls
D:\work\make> ls目录: D:\work\makeMode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2024/3/17 11:59 45054 a.exe
-a---- 2024/3/17 11:34 122 hello.cpp
-a---- 2024/3/17 11:27 12 hello.hpp
-a---- 2024/3/17 11:33 159 main.cpp
- 编译生成中间件.o对象文件:
g++ -c hello.cpp main.cpp
D:\work\make> g++ -c hello.cpp main.cpp
D:\work\make> ls目录: D:\work\makeMode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2024/3/17 11:34 122 hello.cpp
-a---- 2024/3/17 11:27 12 hello.hpp
-a---- 2024/3/17 12:00 1720 hello.o
-a---- 2024/3/17 11:33 159 main.cpp
-a---- 2024/3/17 12:00 1827 main.o
- 生成目标可执行文件:
g++ main.o hello.o -o main
D:\work\make> g++ main.o hello.o -o main
D:\work\make> ls目录: D:\work\makeMode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2024/3/17 11:34 122 hello.cpp
-a---- 2024/3/17 11:27 12 hello.hpp
-a---- 2024/3/17 12:00 1720 hello.o
-a---- 2024/3/17 11:33 159 main.cpp
-a---- 2024/3/17 12:01 45054 main.exe
-a---- 2024/3/17 12:00 1827 main.o
- 运行可执行文件:
./main.exe
D:\work\make> ./main.exe
this is c++ main function!
i love c++
编写Makefile文件
- 事先已经安装好
MinGW
,在C:\MinGW\bin
中会有mingw-make.exe文件
,可以拷贝个副本,改名make.exe
,方便操作。测试make -v
,输出如下:
C:\Users\yance>make -v
GNU Make 3.82.90
Built for i686-pc-mingw32
Copyright (C) 1988-2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
编写简单的Makefile文件
Makefile文件
内容:
# version 1
main: main.o hello.og++ main.o hello.o -o mainmain.o: main.cpp hello.hppg++ -c main.cpp -o main.ohello.o: hello.cpp hello.hppg++ -c hello.cpp -o hello.o# 在windows中 rm 命令报错,无法在PS里使用,只能用在cmd中,所用用del
clean:del *.o main
- 在
Makefile文件
目录下利用PS
输入命令make
:
D:\work\make> ls目录: D:\work\makeMode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2024/3/17 15:45 122 hello.cpp
-a---- 2024/3/17 11:27 12 hello.hpp
-a---- 2024/3/17 11:33 159 main.cpp
-a---- 2024/3/17 16:23 301 MakefileD:\work\make> make
g++ -c main.cpp -o main.o
g++ -c hello.cpp -o hello.o
g++ main.o hello.o -o main
- 最终的生成文件:增加了两个
.o文件
,一个.exe文件
D:\work\make> ls目录: D:\work\makeMode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2024/3/17 15:45 122 hello.cpp
-a---- 2024/3/17 11:27 12 hello.hpp
-a---- 2024/3/17 16:25 1720 hello.o
-a---- 2024/3/17 11:33 159 main.cpp
-a---- 2024/3/17 16:25 45054 main.exe
-a---- 2024/3/17 16:25 1827 main.o
-a---- 2024/3/17 16:23 301 Makefile
- 删除中间文件,输入命令
make clean
,可以看到.o文件
都被删除了。
D:\work\make> make clean
del *.o main
D:\work\make> ls目录: D:\work\makeMode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2024/3/17 15:45 122 hello.cpp
-a---- 2024/3/17 11:27 12 hello.hpp
-a---- 2024/3/17 11:33 159 main.cpp
-a---- 2024/3/17 16:25 45054 main.exe
-a---- 2024/3/17 16:23 301 Makefile
- 运行可执行文件:
./main.exe
D:\work\make> ./main.exe
this is c++ main function!
i love c++
- 可以看到,编辑
Makefile文件
就是重复利用Linux命令
和gcc
相关的编译命令,但可以看到这版本的Makefile
鲁棒性和冗余性很差。