make-02-makefile-编译Linux_C和C++项目快速入门.md


<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 手动清理+伪目标

SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS

P6 使用make编译动态链接库并编写测试项

00:12 动态链接库


Author: Jincan
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Jincan !
  TOC