对Makefile感到困惑(C / unix)

时间:2014-03-29 19:36:37

标签: c unix

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

那么导出是什么:StackImplementation.o呢?比如将它导出到哪里? 另外,gcc -l在做什么?我用谷歌搜索了它,然后用#c; gcc -l链接了一个库文件"。什么链接到库文件? 最后,"将您选择的打印命令替换为低于"意思?什么是lpr呢?什么是干净的:rm -f * .o?

3 个答案:

答案 0 :(得分:1)

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

% make export

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

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

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

% make print

将源文件发送到打印机。

大多数makefile包含一个clean规则来删除生成的文件。在未正确指定依赖项时,必须更改源文件不会导致构建目标。 rm命令是删除的简称;它删除文件。如果你这样做

% make clean

它将强制删除所有以.o结尾的文件。

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

答案 1 :(得分:1)

export: 

这是一个名为" export"并且是makefile中的第一个目标,因此如果在命令行上没有指定目标,它将默认被调用。我不清楚为什么叫它" export"但那是有人为之选择的名字

export: StackImplementation.o

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

StackImplementation.o: StackImplementation.c ...

StackImplementaiton.o取决于源文件StackImplementation.c和列出的包含文件。这将运行gcc,其中包含标志-I ../ Include,它告诉gcc在相邻目录中包含.h文件"包括"

# substitute...

这是一个注释,表示如果你想

将打印命令lpr更改为其他打印​​命令
clean:

这是一个使用-f选项删除目标文件的常见目标,即使未设置写权限也强制删除

答案 2 :(得分:0)

1)lpr提交要打印的文件。命令行中命名的文件将发送到指定的打印机        (如果未指定目标,则为默认目标)。如果没有列出的文件        mand-line,lpr从标准输入读取打印文件。

有关" lpr"的更多信息使用linux的用户手册。


2)gcc -l链接外部库到你的程序,如果有任何依赖。

示例:

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

在Make file ::

clean:
       rm -rf *.o

这里clean是make的规则,当我们调用make clean时,它会调用rm -rf * .o来删除所有目标文件。