我有一个这样的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)
不提取文件名?
答案 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 $@ $<