'notdir'在Makefile中不起作用

时间:2016-07-06 04:15:07

标签: makefile

我有一个这样的makefile:

OBJ_FILES := $(addprefix $(OBJ_DIR)/, $(patsubst %.cc, %.o, $(SRC_FILES)))
...
$(OBJ_FILES): %.o: src/$(notdir %.cc)
    $(CC) $< -o $@ $(CXXFLAGS)

$(SRC_FILES)a.cc,而$(OBJ_FILES)obj/a.o

但是当我运行它时,我收到错误信息:

  

make:***没有规则来制作obj / a.o所需的目标src / obj / a.cc。   停止。

所以我的问题是:为什么$(notdir)不提取文件名?

2 个答案:

答案 0 :(得分:2)

在应用静态模式规则之前处理

notdir,因此$(notdir %.cc)的结果实际上是%.cc,然后由规则替换,以在错误消息中提供路径

以下内容应该有效,您也可以使用几个简介,请记得设置CXX而不是CC

OBJ_FILES := $(SRC_FILES:src/%.cc=$(OBJ_DIR)/%.o)

$(OBJ_FILES): $(OBJ_DIR)/%.o: src/%.cc
    $(COMPILE.cc) $(OUTPUT_OPTION) $<

答案 1 :(得分:0)

试试这个:

OBJECTS = $(addprefix $(OBJ_DIR)/, $(patsubst %.cc,%.o, $(SRC_FILES)))
$(OBJDIR)/%.o: %.cc
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<