【问题标题】:Getting an error while a program in c using makefile在 c 中使用 makefile 的程序时出现错误
【发布时间】:2015-10-20 15:40:29
【问题描述】:

我在使用 makefile 运行我的 c 程序时遇到错误。 当我直接在终端上运行以下命令时,程序运行正常

$ ./a.out test1.c test2.c

(a.out是编译程序生成的可执行文件,test1.c和test2.c是命令行参数)

但是当我在makefile中写下以下内容时:

all : compile run

compile :
    gcc ConsonantVowelCount15.c
run :
    ./a.out $(INPUT)

并在终端上运行以下命令

$ make INPUT=test1.c\ test2.c

它给出了输出,然后是以下错误

makefile:6: 目标“运行”的配方失败
make: *** [run] 错误 45

【问题讨论】:

  • 使编译依赖于运行并通过写run : compile而不是run :重试
  • compile 重命名为 a.out 并使用 run: a.out 生成一个实际上意味着有用的生成文件。使用all: run。如果您仍然希望能够输入make compile,也可以添加compile: a.out。话虽如此,这一切可能与问题无关,因为您实际上并没有告诉我们问题是什么。实际错误高于您粘贴的错误的 sn-p。

标签: c makefile


【解决方案1】:

除了你已经被告知run 应该如何依赖a.outcompile 应该真正更改为a.out 或者被制作成依赖a.out 的假冒,你的确切原因收到此错误消息是因为您的程序返回了一个非零错误值,特别是 45。

当配方中的任何命令返回非零值时,配方将失败(假设 Linux 和大多数其他系统,其中 0 表示成功)。因此,您的 run 目标失败,因为 ./a.out $(INPUT) 返回的不是 0。这当然是假设您已经包含了整个错误消息和错误号以及 Makefile,并且错误消息不是来自 @987654329 的依赖项@。一个简单的检查方法是将./a.out $(INPUT) 替换为true。如果一切正常,那就是你的程序本身。

请注意,程序似乎运行正常,但仍返回错误值。一个可能的原因是您没有在 main 函数中包含 return 语句。假设你使用的是bash,你可以通过echo $?查看最新程序的返回值。

【讨论】:

  • 成功了,我没有返回 0。但是我的一些程序正在运行而没有返回 0
  • 始终从mainexit 获得有意义的错误状态的return 0 并不是很困难。您的编译器对缺少返回语句或错误的main 原型都很宽容,而且不符合标准并不是马虎的借口。
  • @AbhishekGangwar 如果您不在主函数中执行 return 或调用 exit,您的程序很可能会根据您的编译器和设置进行编译。然而,仅仅因为它编译并不意味着一切都很好。在这种情况下,您将有未定义的行为,因为 main 应该返回一个整数。你可能想看看这个 SO 帖子:stackoverflow.com/questions/204476/….
  • @AbhishekGangwar 另外,如果我的回答解决了您的问题(从您的评论中很难看出),您可以接受答案,我们都获得了声誉。更重要的是,该页面的未来访问者将知道这解决了您的问题,因此如果他们有类似的问题,则可以表明它可能会有所帮助。仅当这解决了您的问题时再说一次。
  • @AbhishekGangwar - 如果答案对你有帮助,接受答案来回报你的帮助总是一种亲切的姿态
猜你喜欢
  • 2015-06-23
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多