0

由于 GNU make 3.82 另一个人编写的 Makefile 之一不再有效:

../../PPB_ROOT/ppb-team.mk:238: *混合隐式和普通规则。停止。

第 238 行:

$.o %.h : %.idl
    @echo Cleaning up previous output of idl...
    @-rm -f $@
    @echo Making $@...
    $(IDL_CMD)
    $(IDL_CXX_CMD)
    @ if [ "$(LOCAL_ORB)" != "OMNIORB" ]; then \
        $(OWN_MAKE) -f $(MAKEFILE) `basename '$*'`_skel.o; \
        $(AR) $(ARFLAGS) `basename '$*'`.a `basename '$*'`.o `basename '$*'`_skel.o; \
    else \
        $(AR) $(ARFLAGS) `basename '$*'`.a `basename '$*'`.o; \
    fi;

'$.o' 是什么意思?是错字吗?

4

2 回答 2

3

我想说这是一个 typeo,来自 GNU make docs 第 4.2 节:

http://www.gnu.org/software/make/manual/make.html

Because dollar signs are used to start make variable references, if you 
really want a dollar sign in a target or prerequisite you must write two
of them, ‘$$’ 

我怀疑它应该是

%.o %.h : %.idl
于 2012-11-13T11:49:37.270 回答
0

这看起来是一个产生两个目标的模式规则(参见示例 3)。所以,应该是:

%.o %.h : %.idl
于 2012-11-13T11:50:09.117 回答