gpt4 book ai didi

c - 防止 make 删除从 .def 文件生成的源文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:18 28 4
gpt4 key购买 nike

我不完全知道 .def 文件是如何被使用的,它们是什么,但我希望不删除与 .def 同名的源文件code> 文件创建相应的目标文件后。有办法吗?

更具体地说,我正在研究 bash-4.1我看到许多 .def 文件,例如 builtins/suspend.def 并且在执行 make 之后,suspend.o 得到使用 suspend.c 生成,它在发出 make 之前不存在,但也会在编译命令后立即被删除。我怎样才能阻止 make 删除这些源文件?

最佳答案

文件builtins/Makefile.in在问题链接的 Tar 文件中,您会看到对 suspend 的引用在

DEFSRC =  $(srcdir)/alias.def $(srcdir)/bind.def $(srcdir)/break.def \
# ...
$(srcdir)/source.def $(srcdir)/suspend.def $(srcdir)/test.def \
# ...

OFILES = builtins.o \
# ...
pushd.o read.o return.o set.o setattr.o shift.o source.o \
suspend.o test.o times.o trap.o type.o ulimit.o umask.o \
wait.o getopts.o shopt.o printf.o getopt.o bashgetopt.o complete.o

Makefile.in包含这些模式规则:

# How to make a .o file from a .def file.
.def.o:
$(RM) $@
./$(MKBUILTINS) $(DIRECTDEFINE) $<
$(CC) -c $(CCFLAGS) $*.c || ( $(RM) $*.c ; exit 1 )
$(RM) $*.c

# How to make a .c file from a .def file.
.def.c:
$(RM) $@
./$(MKBUILTINS) $(DIRECTDEFINE) $<

# default rule for making a .o file from a .c file
.c.o:
$(RM) $@
$(CC) -c $(CCFLAGS) $<

因为只有一个文件suspend.def和一个文件 suspend.c没有明确提到,对象suspend.o将由规则 .def.o: 创建其中包含

        $(RM) $*.c

作为最后一个命令。

您可以删除或评论此行。
该规则还将删除相应的 .c如果编译失败。如有必要,您也可以删除它。

请注意,此修改可能会更改后续构建的行为,因为现有的 .c make 将考虑文件.

按要求提供的附加信息:

Makefile可以看出规则,.def文件将使用

处理
        ./$(MKBUILTINS) $(DIRECTDEFINE) $<

这将调用 $(MKBUILTINS)带有附加参数 $(DIRECTDEFINE) ,定义为 -D $(srcdir) ,以及依赖文件( $< ),即匹配的 .def文件。 MKBUILTINS定义为 mkbuiltins$(EXEEXT)这可能是 mkbuiltinsmkbuiltins.exe .

从上下文我可以猜到,mkbuiltins将创建相应的 .c来自 .def 的文件文件。

再次从 Makefile 中可以看出, mkbuiltins是从 mkbuiltins.c 构建的使用 config.h .查看源码或在bash中询问相关论坛到底是什么mkbuiltins会做的。

关于c - 防止 make 删除从 .def 文件生成的源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57903005/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com