【问题标题】:'notdir' doesn't work in Makefile'notdir' 在 Makefile 中不起作用
【发布时间】:2016-07-06 04:15:06
【问题描述】:

我有一个这样的生成文件:

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: *** 没有规则来制作目标 src/obj/a.cc,obj/a.o 需要。 停下来。

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

【问题讨论】:

    标签: makefile


    【解决方案1】:

    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) $<
    

    【讨论】:

    • 谢谢! GNU make 文档10.5.4 How Patterns Match 也谈到了这个问题:)
    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2013-05-19
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      • 2013-09-24
      • 2016-07-24
      • 1970-01-01
      相关资源
      最近更新 更多