【问题标题】:Including generated files in Makefile dependencies在 Makefile 依赖项中包含生成的文件
【发布时间】:2016-10-13 09:09:58
【问题描述】:

我有一组生成的文件。

GENERATED = log/loga.c log/logb.h include/loga.h

initproc 下面的目标取决于上面的GENERATED。但我不能像$(INIT_OBJS) 一样在下面包含$(GENERATED)。它说

fatal error: include/loga.h: No such file or directory 当我这样做时make initproc

initproc: $(INIT_OBJS) log/loga.o init/initb.o settings/settingc.o
             $(CXX) $(CXXFLAGS)  $(LDFLAGS) $^ $(LDLIBSXX)  -o $@

如何包含上面的依赖?

【问题讨论】:

  • 发mvce,你已经显示了链接规则,但是错误显然是指编译错误。

标签: makefile dependencies


【解决方案1】:

您必须添加带有一些规则的$(GENERATED) 目标来解释如何生成这些文件。此外,您必须使用一些patsusbt 和filter 函数来管理头文件、源文件和目标文件。类似的东西应该可以工作:

# All the generated files (source and header files)
GENERATED := log/loga.c log/logb.h include/loga.h

# The rules to generate this files
$(GENERATED):
        <some commands to generate the files ...>

# The rules to generate object files from the generated source files
# This could be merge with another rule from your Makefile
GENERATED_SRC := $(filter %.c,$(GENERATED))
GENERATED_OBJ := $(patsubst %.c,%.o,$(GENERATED_SRC))

$(GENERATED_OBJ): $(GENERATED_SRC)
        $(CXX) $(CXXFLAGS) -c $^ -o $@

# The final target depends on the generated object files
initproc: $(INIT_OBJS) <other objects ...> $(GENERATED_OBJ)
        $(CXX) $(CXXFLAGS) $(LDFLAGS) $^ $(LDLIBSXX) -o $@

【讨论】:

    猜你喜欢
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2016-10-07
    相关资源
    最近更新 更多