make:***[]错误1错误

QMG*_*QMG 34 gcc makefile

我试图在gcc上编译Pro*C文件,我收到此错误:

make: *** [MedLib_x.o] Error 1
Run Code Online (Sandbox Code Playgroud)

这是make打印的命令:

   /usr/bin/gcc -g -fPIC -m64 -DSS_64BIT_SERVER  -I/home/med/src/common -
I/u01/app/oradb11r2/product/11.2.0/dbhome_3/rdbms/demo 
-I/u01/app/oradb11r2/product/11.2.0/dbhome_3/rdbms/public 
-I/u01/app/oradb11r2/product/11.2.0/dbhome_3/precomp/public 
-I/u01/app/oradb11r2/product/11.2.0/dbhome_3/xdk/include INCLUDE=/u01/app/oradb11r2/product/11.2.0/dbhome_3/precomp/public -lnapi -ltabs -c MedLib_x.c
Run Code Online (Sandbox Code Playgroud)

请帮助我为什么会出现错误?虽然也创建了目标文件.

fno*_*kke 22

从GNU Make错误附录,如您所见,这不是Make错误,而是来自gcc的错误.

'[foo]错误NN''[foo]信号描述'这些错误根本不是真正的错误.它们意味着作为配方的一部分调用的程序返回非0错误代码('错误NN'),这使得解释为失败,或者以某种其他异常方式退出(具有某种类型的信号).请参阅食谱中的错误.如果消息没有附加***,则子进程失败,但makefile中的规则以 - 特殊字符为前缀,因此忽略错误.

因此,为了解决问题,需要来自gcc的错误消息.将Makefile中的命令直接粘贴到命令行,看看gcc说的是什么.有关Make errors的更多详细信息,请单击此处.


zra*_*ajm 16

我有同样的事情.运行"make",只有这条消息才会失败.

% make
make: *** [all] Error 1
Run Code Online (Sandbox Code Playgroud)

这是由规则中的命令以非零退出状态终止而引起的.想象一下以下(愚蠢)Makefile:

all:
       @false
       echo "hello"
Run Code Online (Sandbox Code Playgroud)

这将失败(没有打印"hello")上面的消息,因为false终止退出状态1.

在我的情况下,我试图聪明并在处理之前备份文件(这样我就可以将新生成的文件与我之前的文件进行比较).我这样做是因为我的Make规则看起来像这样:

@[ -e $@ ] && mv $@ $@.bak
Run Code Online (Sandbox Code Playgroud)

...没有意识到如果目标文件不存在,那么上述构造将退出(不运行mv命令)退出状态1,因此该规则中的任何后续命令都无法运行.将我的错误行重写为:

@if [ -e $@ ]; then mv $@ $@.bak; fi
Run Code Online (Sandbox Code Playgroud)

解决了我的问题.