【问题标题】:how to run makefile in ubuntu如何在ubuntu中运行makefile
【发布时间】:2016-01-21 17:23:08
【问题描述】:

有两个简单的 .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 时,它会显示正确的输出。

【问题讨论】:

  • 我刚刚注意到您已将其标记为ubuntu,但您正在编译.exe 程序?我的答案仍然有效,但是您使用的是哪个操作系统,您的朋友使用的是哪个操作系统?
  • 我们都使用 ubuntu 作为虚拟机。其实是windows操作系统。
  • 其实扩展在linux中并不是那么重要。这只是一个名字。

标签: bash ubuntu makefile


【解决方案1】:

您朋友的电脑正在做一些奇怪的事情,从您的问题中不清楚他们做了什么。您的电脑运行正常。

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

所以调用 ./all 应该会失败,因为它要求运行一个名为 all 的程序,但它并不存在。

很可能您的朋友已经为自己编写了一个名为“all”的程序或脚本。您需要询问您的朋友该脚本/程序的作用以及它是如何实现的。

编辑

要查看您的朋友做了什么,请打开您朋友电脑上的终端(如屏幕截图中的终端)并输入命令

ls -lh

这将列出该目录中的所有文件。寻找一个名为“all”的人。它可能看起来像这样(绿色的“全部”一词):

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

假设你可以通过输入来查看它的内容

cat ./all

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

chmod u+x all

【讨论】:

  • 感谢您的回答。您的意思是我无法同时获得两个文件的输出?我必须单独运行它们吗?我添加了一张图片。我们都做过同样的事情。仍然输出不同。 ./所有对她有效,对我无效。
  • 是的。这是正确的。在你的朋友机器上做了一些不同的事情。我注意到您正在主目录中工作,而不是为练习创建文件夹。可能是您的朋友之前所做的某事将all 程序留在那里。因此,即使你们都为这个练习做了同样的事情,你的朋友也有可能在这个练习之前做过另一个练习。
【解决方案2】:

在这种情况下,“all”是make 术语中的“伪目标”。由于all: ... 行下没有构建命令,因此实际上没有任何东西会创建一个名为all 的文件(实际上,在该目录中有一个名为all 的文件,并且时间戳比@987654325 更新@、.o.exe 文件可能会混淆 make)。这里的伪目标只是表示必须为make 构建其他两个.exe 文件才能认为其工作已完成。

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

【讨论】:

  • 感谢您的回答。我必须分别运行这两个文件还是什么?我不明白。我已经编辑了我的问题并添加了我朋友电脑上的终端屏幕截图。 ./all 执行这两个程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 2013-06-14
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
相关资源
最近更新 更多