我的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
选项的含义,请参阅手册(。