美文网首页Linux
Linux-Makefile(二)

Linux-Makefile(二)

作者: 飞向深空 | 来源:发表于2022-01-08 16:50 被阅读0次
#生成可执行文件的名称
Target = file_demo
ARCH ?= x86

#编译器 CC
#根据传入的参数 ARCH,确定使用的编译器
#默认使用 gcc 编译器
#make ARCH=arm 时使用 ARM-GCC 编译器
ifeq ($(ARCH), x86)
    CC = gcc
else
    CC = arm-linux-gnueabihf-gcc
endif

#存放中间文件的路径
build_dir = build_$(ARCH)

#存放源文件的文件夹
src_dir = .

#存放头文件的文件夹
inc_dir = includes .

#源文件
sources = $(foreach dir,$(src_dir),$(wildcard $(dir)/*.c))

# 目标文件(*.o)
objects = $(patsubst %.c,$(build_dir)/%.o,$(notdir $(sources)))

# 头文件
includes = $(foreach dir,$(inc_dir),$(wildcard $(dir)/*.h))

# 编译参数
# 指定头文件的路径
CFLAGS = $(patsubst %, -I%, $(inc_dir))

# 链接过程
# 开发板上无法使用动态库,因此使用静态链接的方式
$(build_dir)/$(Target) : $(objects) | create_build
    $(CC) $^ -o $@

# 编译工程
# 编译 src 文件夹中的源文件,并将生成的目标文件放在 objs 文件夹中
$(build_dir)/%.o : $(src_dir)/%.c $(includes) | create_build
    $(CC) -c $(CFLAGS) $< -o $@


# 以下为伪目标,调用方式:make 伪目标
#clean:用于 Clean Project
#check:用于检查某个变量的值
.PHONY:clean cleanall check create_build

# 按架构删除
clean:
    rm -rf $(build_dir)

# 全部删除
cleanall:
    rm -rf build_x86 build_arm

# 命令前带"@", 表示不在终端上输出执行的命令
# 这个目标主要是用来调试 Makefile 时输出一些内容
check:
    @echo $(CFLAGS)
    @echo $(CURDIR)
    @echo $(src_dir)
    @echo $(sources)
    @echo $(objects)

# 创建一个新目录 create,用于存放过程文件
create_build:
    @mkdir -p $(build_dir)

相关文章

  • Linux-Makefile(二)

  • Linux-Makefile(一)

    Makefile文件名字需要是Makefile或者makefile.管理一个项目工程,实质上就是管理项目文件间的依...

  • 二(二)

    发什么神经 突然就很想花钱 一边心疼 一边毫不在乎的花 啧 莫名其妙

  • 二,二

    2017.9.11教师节后的周一,第一次走进教室,刚站到讲台两个小可爱送给我两束花,原谅我那时候人还没有认全没有记...

  • 二〇二〇

    本来这篇小结打算年初写的,但是想想后边还有复试就先放一放,结果复试结束后过了两个月才想起要写这篇小结... 时过境...

  • 二金二木二火二土

    今天看完了极简中国史,这本书看了半个多月,因为是八十年前写的书,不是白话文,所以看的特别累。不过从近代前辈的角度去...

  • 说二『似二非二的二』

    说实话原以为他最多似二,生活小节或许专门学着似二,中枢神经应该不至于非二,没想到最近越来越疯狂地绞尽脑汁地朝着二的...

  • 二胎(二)

    今天宝宝三十周了,还有十周你就要出来了,也许会提前,妈妈和家人都很期待。 到了孕晚期,睡觉是个问题,左睡右睡都不对...

  • 二小姐(二)

    我去了李家,那环境好,夫人老爷小姐都很和蔼,我正坐在由木头和瓷做的椅子上,正等待着女管家来接我,我人生地不熟...

  • 二、递归(二)

    一、棋盘分割问题 【每次切完一个棋盘,就是需要舍弃掉一面,只能在一面操作】

网友评论

    本文标题:Linux-Makefile(二)

    本文链接:https://www.haomeiwen.com/subject/mngecrtx.html