GNU make项目管理学习笔记

P26

$@ $% $< $? $^ $+ $*

p33

模式规则中的%百分比符大体上相当于UNIX shell中的星号,它可以代表任意多个字符。

p42

依存文件:更改头文件时make编译无法提示更新,可以手动加入目标文件与C头文件的依存关系但实际的程序依赖关系复杂。所以此时编写一个Makefile工作目标,此工作目标的动作就是以-M选项对所有源文件执行gcc,并将结果存入一个依存文件中,然后重新执行make以便把刚才所产生的依存文件引入到Makefile,这样就可以触发我们所需要的更新动作。如果我们为每个源文件产生依存关系,将之存入相应的依存文件,并以该.d文件为工作目标加入依存规则。这样当源文件被改变时,make就会知道需要更新.d文件。

sed 替换文件中的字符串

p47

将$^替换成$?时,make会将时间戳在工作目标之后的目标文件传递给ar。

P49

如果Makefile已经将程序库文件指定为工作目标,它就不能砸必要条件里对该文件使用-l选项。运行make会出现错误,make不会把-lcounter扩展成libcounter去搜索工作目标,make只会搜索程序库。所以如果要在Makefile里进行程序库的编译工作,必须使用文件名的语法。

p50

要让复杂程序的链接工作没有错,需要使用一些方法。链接器会以此搜索命令行上所指的程序库。所以如果程序库A包含了一个未定义的符号,如OPEN,而该符号定义在程序库B中,那么就必须在链接命令行上于A之前指定B。程序库的链接顺序是相当重要的。

P54

获得尚未使用的磁盘空间

DF=df

AWK=awk

free-space:=$(DF) . | $(AWK) 'NR == 2 {printf $$4}'

驾驭Makefile https://wenku.baidu.com/view/19505f7c5acfa1c7aa00cc24.html?from=search

p34

对于规则中的每一个命令,make都是在一个新的Shell上运行它的,如果希望多个命令在同一个Shell中运行,则需要用‘;’将这些命令连起来。当命令很长时,为了方便阅读,我们需要将一行命令分成多行,这需要用‘\’。为了理解,我们可以做一个实验。现在假设我们需要创建一个test目录,然后,在这个test目录下面再创建一个subtest目录,如果你不知道make是如何执行命令的。

你可能感兴趣的:(Linux下编程)