makefile学习笔记

本文介绍Linux环境下C语言程序从源代码到可执行文件的编译过程,包括预处理、汇编、链接等步骤。同时详细解析Makefile的编写规则与技巧,如依赖项管理、命令执行及变量使用等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. linux下c语言编译
    .c ———>(.i)预处理———> (.s)汇编文件————>(.o)目标文件———–>(.elf)可执行文件———>(.bin)Arm上可执行
    .a文件实际上为.o文件打包为静态库 .so为一个缺少main函数的.elf可执行文件,动态库
  2. makefile书写规则

    • Target...:normal-prerequistes|order-only-prerequistes//target:规则的目标,可以为.o文件或最后的可执行文件 normal-prerequistes:规则的依赖(更新重建目标) order-only-prerequisites (更新不重建目标)
      [Tab]command // 执行的命令
    • 使用变量简化书写,include包含其他makefile
    • 通配符“*”、“.”、“?” 建议使用
      object = $(wildcard *.o)
      object = $(patsubst %.c,%.o,$(wildcard *.c))
    • vpath/gpath PATTERN DIRECTORIES:依赖查询目录/目标生成目录 Pattern:文件类型(.h/.o/.c)
    • INAME参数表示在生成目标时需要链接名为”ilbNAME.so/libNAME.a”的库文件
    • .PHONY 声明为伪目标,这样即使没有依赖也会在每次make时调用
  3. 注意事项:

    • [Tab]字符为开始都会被交给系统shell去执行,以[Tab]开始的注释也会交由shell,所以命令行要以[Tab]开始
    • 书写makefile时较长的行可以用\来进行换行,注意\后不能加空格
    • Makefile的第一个目标是终极目标
    • 环境变量makefiles指向的文件会被make首先解析,不会报错也不会作为终极目标
    • vpath/gpath 更改的是makefile查询/生成的目录,并不是编译时源文件的依赖目录(gcc -l)
    • $(RM) = “rm -f”
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值