对Makefile(C/unix)感到困惑

  • 本文关键字:unix Makefile unix
  • 更新时间 :
  • 英文 :


http://puu.sh/7OiDL.png

好的,那么导出什么:StackImplementation.o do?比如它把它出口到哪里?另外,gcc-l在做什么?我在谷歌上搜索了一下,上面写着"gcc-l与库文件的链接"。链接到库文件的是什么?最后,"用您选择的打印命令替换下面的lpr"是什么意思?lpr是做什么的?什么是干净的:rm-f*.o?

export是虚假目标的名称。你可以说

% make export

make将构建其依赖关系。没有指定如何将依赖项转换为名为export的文件的操作,并且在没有隐式规则的情况下,make将在构建依赖项后停止。

-I到gcc正在添加一个路径来搜索包含文件。您将其与-l选项混淆,后者指定要链接的库的名称(可以满足未解析符号的预构建对象文件集合(。

lpr命令将一个文件发送到默认的行式打印机。同样,print是一个虚假的目标;进行

% make print

将源文件发送到打印机。

大多数生成文件都包含一个clean规则来删除生成的文件。当没有正确指定依赖项,并且对源文件的更改不会导致生成目标时,这是必要的。rm命令是remove的缩写;它会删除文件。如果你做

% make clean

它将强制删除所有以CCD_ 8结尾的文件。

这些目标中的大多数都是假的,如果碰巧有文件的名称比它们的依赖项(如果有的话(新,它们将无法正常工作。大多数make允许您通过将哪些目标列为超级虚假.PHONY目标的依赖项来指定哪些目标是虚假的。Make将忽略文件系统,并始终应用规则。

export: 

这是一个名为"export"的目标,是makefile中的第一个目标,因此如果在命令行上没有指定目标,则默认情况下会调用它。我不清楚为什么它被称为"出口",但这是有人为它选择的名称

export: StackImplementation.o

这表示导出依赖于StackImplementation.o,因此当调用导出时,它将调用目标StackImplication.o

StackImplementation.o: StackImplementation.c ...

o依赖于源文件StackImplementation.c和列出的include文件。这将运行带有标志-I的gcc/Include哪个告诉gcc在相邻目录"Include"中包含.h文件

# substitute...

这是一个注释,指示如果您想,可以将打印命令lpr更改为其他打印命令

clean:

这是一个常见的目标,它将使用-f选项删除对象文件,即使没有设置写入权限,也会强制删除

1(lpr提交文件进行打印。命令行中命名的文件将发送到命名的打印机(如果未指定目的地,则为默认目的地(。如果网站上没有列出任何文件命令行,lpr从标准输入读取打印文件。

有关"lpr"的更多信息,请参阅linux的用户手册。


2( gcc-l将外部库链接到您的程序(如果有任何依赖项的话(。

示例::

gcc hello.c -o hello -lpthread -ldrm -ldrm_omap 

在Make文件中::

clean:
       rm -rf *.o

这里clean是make的一个规则,当我们调用makeclean时,它将调用rm-rf*.o来删除所有对象文件。

最新更新