makefile学习笔记

  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”

你可能感兴趣的:(C语言知识,makefile知识)