GNU Make:强制使用我自己版本的规则



我的Makefile中有这个规则:

%: ${OBJ}/%.o ${OBJ}/AgentProgram.o ${LIB}
$(CXX) $^ ${LDFLAGS} ${LIB_DIRS} ${LIBS} $(OUTPUT_OPTION)

如果obj/Foo.o存在,make将使用此规则。但是,如果对象还不存在,它将使用内置规则,并尝试直接从我的.cpp.进行编译

有没有办法将此规则定义为默认规则,或者关闭内置规则?

我的解决方法是修改我的make bins目标,以便首先生成所有.o文件。在这种情况下并没有那么难,我改变了:

bins: ${BINS}

并将其变成这样:(我已经有${OBJECTS}可用(

bins: ${OBJECTS} ${BINS}

您可以取消模式规则,包括内置模式规则,方法是定义它们而不使用配方:

%: %.c
%: %.cpp

将从CCD_ 2和CCD_。

或者,使用一个足够新的GNU make版本,您可以通过将以下内容添加到您的makefile中来禁用所有内置规则:

MAKEFLAGS += -r

(有关-r选项的含义,请参阅手册(。

最新更新