欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > makefile的运行(结合终端输出反馈)

makefile的运行(结合终端输出反馈)

2024/10/24 4:36:52 来源:https://blog.csdn.net/tcben/article/details/141922560  浏览:    关键词:makefile的运行(结合终端输出反馈)

一个基于arm架构的gemm项目

文章目录

  • 前言
  • 一、makefile
  • 二、makeoutput(终端反馈日志)
  • 三、解析此过程
    • 3.1 make是什么
  • 总结


前言

我的思路就是,从makefile和makefile的输出日志入手,看懂项目的运行原理
链接各个不同的项目子文件,走一遍整个流程

但是我自知记忆力一般,容易忘记,遂纪录在此

项目地点


一、makefile

OLD  := MMult_4x4_10
NEW  := MMult_4x4_21
# ARCH := armv7-a
# ARCH := aarch64
ARCH := native#
# sample makefile
#CC         := g++
LINKER     := $(CC)
#CFLAGS     := -O0 -g -Wall
CFLAGS     := -std=c++17 -O2 -g -march=$(ARCH) -ftree-vectorize
LDFLAGS    := -lmUTIL       := copy_matrix.o \compare_matrices.o \random_matrix.o \dclock.o \REF_MMult.o \print_matrix.oTEST_OBJS  := test_MMult.o $(NEW).o %.o: %.cpp$(CC) $(CFLAGS) -c $< -o $@all: make clean;make test_MMult.xtest_MMult.x: $(TEST_OBJS) $(UTIL) parameters.h$(LINKER) $(TEST_OBJS) $(UTIL) $(LDFLAGS) \$(BLAS_LIB) -o $(TEST_BIN) $@ run:	make allexport OMP_NUM_THREADS=1export GOTO_NUM_THREADS=1echo "version = '$(NEW)';" > output_$(NEW).m./test_MMult.x >> output_$(NEW).mcp output_$(OLD).m output_old.mcp output_$(NEW).m output_new.mclean:rm -f *.o *~ core *.xcleanall:rm -f *.o *~ core *.x output*.m *.eps *.png

二、makeoutput(终端反馈日志)

make all
make[1]: Entering directory '/home/ywc/HPC/how-to-optimize-gemm-fromgit/how-to-optimize-gemm/aarch64'
make clean;
make[2]: Entering directory '/home/ywc/HPC/how-to-optimize-gemm-fromgit/how-to-optimize-gemm/aarch64'
rm -f *.o *~ core *.x
make[2]: Leaving directory '/home/ywc/HPC/how-to-optimize-gemm-fromgit/how-to-optimize-gemm/aarch64'
make test_MMult.x
make[2]: Entering directory '/home/ywc/HPC/how-to-optimize-gemm-fromgit/how-to-optimize-gemm/aarch64'
g++ -std=c++17 -O2 -g -march=native -ftree-vectorize -c test_MMult.cpp -o test_MMult.o
g++ -std=c++17 -O2 -g -march=native -ftree-vectorize -c MMult_4x4_21.cpp -o MMult_4x4_21.o
g++ -std=c++17 -O2 -g -march=native -ftree-vectorize -c copy_matrix.cpp -o copy_matrix.o
g++ -std=c++17 -O2 -g -march=native -ftree-vectorize -c compare_matrices.cpp -o compare_matrices.o
g++ -std=c++17 -O2 -g -march=native -ftree-vectorize -c random_matrix.cpp -o random_matrix.o
g++ -std=c++17 -O2 -g -march=native -ftree-vectorize -c dclock.cpp -o dclock.o
g++ -std=c++17 -O2 -g -march=native -ftree-vectorize -c REF_MMult.cpp -o REF_MMult.o
g++ -std=c++17 -O2 -g -march=native -ftree-vectorize -c print_matrix.cpp -o print_matrix.o
g++ test_MMult.o MMult_4x4_21.o  copy_matrix.o compare_matrices.o random_matrix.o dclock.o REF_MMult.o print_matrix.o -lm \-o  test_MMult.x 
make[2]: Leaving directory '/home/ywc/HPC/how-to-optimize-gemm-fromgit/how-to-optimize-gemm/aarch64'
make[1]: Leaving directory '/home/ywc/HPC/how-to-optimize-gemm-fromgit/how-to-optimize-gemm/aarch64'
export OMP_NUM_THREADS=1
export GOTO_NUM_THREADS=1
echo "version = 'MMult_4x4_21';" > output_MMult_4x4_21.m
./test_MMult.x >> output_MMult_4x4_21.m
cp output_MMult_4x4_10.m output_old.m
cp output_MMult_4x4_21.m output_new.m

三、解析此过程

3.1 make是什么

在 Linux 中,make 是一个构建自动化工具,主要用于管理和自动化软件编译的过程。它通过读取 Makefile 文件中的规则和依赖关系,帮助用户高效地构建和管理项目。

若在终端直接输入一个make $(target),运行步骤是这样的
1.读取makefile

  • make会在当前目录中查找名为Makefile或makefile(以下称makefile)的文件,并读取其内容,没有就会报错

2.解析目标

  • make会查找makefile文件中

3.检查依赖关系

  • 对于指定的target,make会检查其依赖项,如果target存在依赖项,make会检查这些依赖文件的最后修改时间;如果任何依赖项比目标更新(即依赖项的修改时间晚于目标),则make会认为目标需要重新构建

4.执行命令

  • 如果目标需要更新,make会执行与该目标关联的命令。这些命令通常在Makefile中以缩进的方式列出。这些命令会在新的Shell环境中执行。

5.重复过程

  • 对于每个依赖项,make会递归地重复步骤3和4,确保所有依赖项都被正确构建。

6.处理伪目标

  • 如果指定的目标是一个伪目标(如clean),make直接执行其定义的命令,无需检查任何依赖关系。

7.完成构建

  • 一旦所有目标和依赖项都被处理,make会完成执行,并返回到终端。

注:在 Makefile 中,伪目标(或称伪命令)是指不对应于实际文件的目标。它们通常用于执行特定的任务,如清理中间文件、安装程序等。伪目标的一个常见示例是 clean。

首先是在终端make run启动项目

可以看到makefile中的run


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com