如何在ubuntu中运行makefile

时间:2015-10-22 12:19:41

标签: bash ubuntu makefile

有两个简单的.c文件add.c和hello.c。这是我的makefile -

all:  add.exe hello.exe

add.exe: add.o

    gcc -o add.exe add.o



hello.exe: hello.o

    gcc -o hello.exe hello.o



add.o: add.c 

    gcc -c add.c



hello.o: hello.c 

    gcc -c hello.c

在终端上输入make时会显示所有这四个命令,但当我尝试使用./all运行时,它会显示

bash: ./all: No such file or directory. 

./hello.exe./add.exe效果很好。

当我在朋友的电脑上输入./all时,它会显示正确的输出。

enter image description here

2 个答案:

答案 0 :(得分:6)

你朋友的电脑正在做一些奇怪的事情,而且你的问题并不清楚他们做了什么。您的电脑正常运作。

调用make all将编译所有内容,但它实际上并没有创建一个名为all的程序。它只编译两个程序:hello.exeadd.exe

因此,调用./all会失败,因为要求运行一个名为all的程序并不存在。

你的朋友很可能已经写了一个名为" all"的程序或脚本。您需要询问您的朋友该脚本/程序的功能以及执行方式。

修改

要查看你的朋友做了什么,在你的朋友电脑上打开一个终端(就像屏幕截图中的那个)并输入命令

ls -lh

这将列出该目录中的所有文件。寻找一个名为" all"。它可能看起来像这样(带有#34;所有"绿色):

-rwxr-----  1 appy appy 67 Oct 23 15:05 all

假设那里你可以通过输入

来查看它的内容
cat ./all

要让您的朋友像朋友一样工作,请创建一个具有相同内容的类似文件。要使其可运行,您可能需要更改文件权限:

chmod u+x all

答案 1 :(得分:0)

在这种情况下,“全部”是make术语中所谓的“伪目标”。由于all: ...行下没有构建命令,因此实际上没有任何内容可以创建名为all的文件(实际上,在该目录中有一个名为all的文件并且具有比.c更新的时间戳,.o.exe文件可能会混淆make)。这里的伪目标只是说明必须为.exe构建其他make文件以考虑其工作完成的方式。

假设这是GNU Make,条目.PHONY: all会告诉它all并不真正对应应该存在的文件。