2015-06-12 69 views
0

我有一个GNU make makefile,它有一些明确的后缀规则,这些后缀规则定义了哪些make没有遵守。GNU make不识别后缀规则

这里是生成文件的相关部分:

#------------------------------------------------------------ 
# Suffixes 
#------------------------------------------------------------ 
C++_SUFFIX = cpp 
C_SUFFIX = c 
IDL_SUFFIX = idl 

但是,当运行make时,它未能找到足够的后缀:

#------------------------------------------------------------ 
# Suffix Targets 
#------------------------------------------------------------ 
.SUFFIXES = .$(C++_SUFFIX) .$(C_SUFFIX) .$(IDL_SUFFIX) .hh .o 

.$(IDL_SUFFIX).hh: 
     @echo "TARGET : .$(IDL_SUFFIX).hh" 
     @echo "COMPILER : $(IDL)" 
     @echo "OPTIONS : $(IDL_COMPILE_OPTS)" 
     $(IDL) $(IDL_COMPILE_OPTS) $*.$(IDL_SUFFIX) 
     @echo "COMPILED : $*.hh $*C.$(C++_SUFFIX) $*S.$(C++_SUFFIX)" 

.$(C++_SUFFIX).o: 
     @echo "TARGET : .$(C++_SUFFIX).o" 
     @echo "COMPILER : $(C++)" 
     @echo "OPTIONS : $(C++_COMPILE_OPTS) $(NO_LINK_PHASE) -o $*.o" 
     $(C++) $(C++_COMPILE_OPTS) $(NO_LINK_PHASE) -o $*.o $*.$(C++_SUFFIX) 
     @echo "COMPILED : $*.o" 

.$(C_SUFFIX).o: 
     @echo "TARGET : .$(C_SUFFIX).o" 
     @echo "COMPILER : $(C)" 
     @echo "OPTIONS : $(C_COMPILE_OPTS) $(NO_LINK_PHASE) -o $*.o" 
     $(C) $(C_COMPILE_OPTS) $(NO_LINK_PHASE) -o $*.o $*.$(C_SUFFIX) 
     @echo "COMPILED : $*.o" 

后缀名先前在Makefile中定义从.idl文件制作.hh文件(我定义的第一个后缀规则)

Make: Don't know how to make /path/to/example/file.hh. Stop. 

任何帮助,将不胜感激。

+0

这斜线看起来我错了......除非你有一个'/ file.idl'文件也在您的文件系统的根目录中。 –

+0

只是一个例子。我宁愿不发布真正的道路。公司规则和所有。在与“file.hh”依赖关系相同的目录中有一个“file.idl”,它是错误消息的来源。我会让这条假路径更加虚假。 –

+0

“make -d”报告关于在那里的尝试?你是否有使用后缀规则而不是模式规则的原因? –

回答

2

对于任何在将来遇到此事的人来说,我的错误当然是一个简单的错误。

.SUFFIXES is special target,not variable。因此,要追加到您使用的语法.SUFFIXES名单

.SUFFIXES: .list .of .suffixes 

.SUFFIXES = .list .of .suffixes