<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
make
targets that are often phony are:all
,install
,clean
,distclean
,TAGS
,info
,check
.
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS