<center>makefile-编译Linux_C和C++项目快速入门.md </center>
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
makefile 编译Linux C/C++项目快速入门
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
P1 makefile介绍
https://www.bilibili.com/video/BV1vg41177zT?spm_id_from=333.337.search-card.all.click





初期写一个makefile就好了,头文件,后面你不需要写了,

课程大纲



实际项目
13:36
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
P2 动手编写第一个makefile编译c++多文档
00:10 开发环境安装

- msys2在安装时gcc和gfortran都安装了,VScode
01:40 先动手

02:00 make单文件

06:58 引入第三方库

- 由于我是在windows下,故引入第三方库还是未出错;
09:07 make多文件

make后确实在编译中出现了问题,需要去修改makefile目标的依赖项

SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
P3 g++分步编译演示从源码到执行程序的四步
GCC编译过程

汇编后,形成
.o文件;链接..
gfortran 类似
GCC常用选项


08:30 GCC预处理过程,g++ -E test.cpp>test.ii
- 找不到头文件,预处理会出错;
10:30 GCC编译过程,g++ -S test.ii
- 生成
test.s文件,为汇编代码,不是二进制文件; - 有语法错误,编译时会出错;
11:30 GCC汇编过程,g++ -c test.s
- 可以做到汇编这一层次(包含预处理、编译、汇编);
- 生成
test.o,二进制文件; - 有语法错误,编译时会出错;
12:10 GCC链接和运行,g++ test.o -o test,./test
- 生成
test.exe可执行文件, - 找不到定义,动态库引用版本出错,链接会出错;
- 找不到正确的动态库,运行会出错;(windows下链接和运行的动态库不一样,linux一样)
13:07 G++ 分步编译总结

SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
P4 makefile运行流程分析并使用变量改写项目
00:15 makefile运行流程

03:25 makefile文件内容5部分


05:35 makefile变量


- CXX,CXXFLAGS

- $@
10:00 练习:使用系统变量

- CXX变量
13:00 练习:使用自定义变量

16:17 加@,不显示命令执行;
刘锦灿@LAPTOP-085N0595 /d/zetero/VScode/Fortran/src/first_make
$ rm first_make.exe
刘锦灿@LAPTOP-085N0595 /d/zetero/VScode/Fortran/src/first_make
$ make
echo "begin build first_make"
begin build first_make
#g++ first_make.cpp -o first_make #tab健
#g++ first_make.cpp -o first_make -lpthread
#g++ first_make.cpp xdata.cpp -o first_make -lpthread
g++ first_make.cpp xdata.cpp -o first_make -lpthread
In file included from first_make.cpp:3:
xdata.h:2:15: warning: extra tokens at end of #ifndef directive
2 | #ifndef XDATA Hi
| ^~
In file included from xdata.cpp:1:
xdata.h:2:15: warning: extra tokens at end of #ifndef directive
2 | #ifndef XDATA Hi
| ^~
echo "first_make build success! "
first_make build success!
刘锦灿@LAPTOP-085N0595 /d/zetero/VScode/Fortran/src/first_make
$ rm first_make.exe
刘锦灿@LAPTOP-085N0595 /d/zetero/VScode/Fortran/src/first_make
$ make
begin build first_make
In file included from first_make.cpp:3:
xdata.h:2:15: warning: extra tokens at end of #ifndef directive
2 | #ifndef XDATA Hi
| ^~
In file included from xdata.cpp:1:
xdata.h:2:15: warning: extra tokens at end of #ifndef directive
2 | #ifndef XDATA Hi
| ^~
first_make build success!
17:00 makefile中命令行执行失败仍继续执行

SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
P5 makefile自动推导目标代码配置和伪目标clean清理
00:10 自动推导

- 自动推导涉及
.o文件 - 红色箭头所指示部分,是自动推导出来的;
01:15 自动推导涉及头文件 test.h的引用

- CXXFLAGS,编译器的选项
06:00 手动清理+伪目标

伪目标
.PHONY的意义:https://stackoverflow.com/questions/2145590/what-is-the-purpose-of-phony-in-a-makefileThese special targets are called phony and you can explicitly tell Make they’re not associated with files.
Some common
maketargets that are often phony are:all,install,clean,distclean,TAGS,info,check.
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS