• Makefile的学习


    1、 Makefile的定义

    •    ?=若变量未定义,则定义;+=在变量后面追加;:=和=均为赋值符号(其中,=是最基本的赋值,会将Makefile全部展开后决定对应的值,而:=表示变量的值取决于当前在Makefile里面的位置)。
    •  Makefile里面的一些控制语句记得敲空格,想调用shell脚步赋值,可以这样写PWD := $(shell pwd).

              总结:Makefile和sheel脚步有很多类似之处。

    2、 Makefile的规则

        make命令执行时,需要一个Makefile文件,以用来告诉make命令需要怎么样去编译和链接,规则是:

    •    如果这个工程没有编译过,那么所有的c文件都要编译并链接。
    •    如果这个工程的c文件被修改过,那么我们只编译被修改过的c文件,并链接目标程序。
    •    如果这个工程的头文件被改变了,那么我们只需要编译引用这个头文件的c文件,并编译链接。(具体怎么知道头文件修改了,需要在编译时把头文件列出来)

    3、 Makefile的通配符

       wildcard扩展通配符:SOURCE += $(wildcard *.c)获取工作目录下的所有.c55kLTgjDv文件。

       patsubst替换通配符:OBJECTS = $(patsubst %.c,%.o,&(SOURCE)或者OBJECTS = $(SOURCE:%.c=%.o)

       通配符通常发生在以下时刻:

    •    在规则的目标、依赖中的通配符,make在读取Makefile时自动为其进行匹配处理(即展开),规则是由make去管理的。
    •    在规则的命令中的通配符不需要make来操心,它们总是由shell来展开。
    •     除了上面两点之外的其他地方(如变量定义),不能直接使用统配符,只能通过wildcard来达到目的,得到以后就可以用静态模式了。

     4、 Makefile的静态模式

         其中%.c到%.o是通配符转换,其中在实际编码时target可以是不需要的。

  • 相关阅读:
    Leetcode: Insert Delete GetRandom O(1)
    Leetcode: Kth Smallest Element in a Sorted Matrix
    Leetcode: Combination Sum IV && Summary: The Key to Solve DP
    Leetcode: Wiggle Subsequence
    Leetcode: Guess Number Higher or Lower II
    Leetcode: Guess Number Higher or Lower
    Leetcode: Find K Pairs with Smallest Sums
    Leetcode: Super Pow
    Leetcode: Largest Divisible Subset
    Leetcode: Water and Jug Problem && Summary: GCD求法(辗转相除法 or Euclidean algorithm)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309074.html
Copyright © 2020-2023  润新知