我在使用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: recipe for target 'run' failed
make: *** [run] Error 45
除了您已经给出的关于run
应该如何依赖a.out
和compile
应该真正更改为a.out
或依赖a.out
的虚假的评论之外,您得到此错误消息的确切原因是因为您的程序返回非零错误值,具体为45。
当配方中的任何命令返回非零值时,配方失败(假设Linux和大多数其他系统中0表示成功)。因此,run
目标失败,因为./a.out $(INPUT)
返回的不是0。当然,这是假设您已经包含了整个错误消息、错误编号和Makefile,并且错误消息不是来自run
的依赖项。一个简单的检查方法是将./a.out $(INPUT)
替换为true
。如果一切正常,那么这就是你的程序本身。
注意,程序可能看起来运行正确,但仍然返回一个错误值。造成这种情况的一个可能原因是您没有在main
函数中包含return
语句。假设您使用的是bash,您可以通过echo $?
查看最新程序的返回值。