有两个简单的.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时,它会显示正确的输出。
答案 0 :(得分:6)
你朋友的电脑正在做一些奇怪的事情,而且你的问题并不清楚他们做了什么。您的电脑正常运作。
调用make all
将编译所有内容,但它实际上并没有创建一个名为all
的程序。它只编译两个程序:hello.exe
和add.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
并不真正对应应该存在的文件。