gpt4 book ai didi

GCC makefile 依赖生成路径

转载 作者:行者123 更新时间:2023-12-04 18:45:20 25 4
gpt4 key购买 nike

我使用 -MM GCC 中的标志以生成对象的 makefile 依赖项。生成文件简要如下所示:

-include autodep
...
$(TARGET): build $(OBJECTS)
$(CC) -shared -o $@ $(OBJECTS)
$(CC) -MM $(SOURCES) > autodep

源位于文件夹 src 中.然而, autodep文件将包含没有相对路径的对象目标:
foo.o: src/foo.c src/foo.h
bar.o: src/bar.c src/bar.h src/baz.h

我应该如何将它们变成这样:
src/foo.o: src/foo.c src/foo.h
src/bar.o: src/bar.c src/bar.h src/baz.h

?

我尝试使用 -MT标志,但它似乎完全丢弃了对象目标。

最佳答案

-MT设置整个目标名称。如果您想为每个源设置不同的目标,则需要不同的 -MT每个源的参数,这意味着编译器的多次调用和 foreach 循环:

$(TARGET): build $(OBJECTS)
$(CC) -shared -o $@ $(OBJECTS)
rm autodep
$(foreach SRC,$(SOURCES),$(CC) -MM -MT $(SRC:.c=.o) $(SRC) >> autodep;)

或者,您可以使用 sed 来按摩输出
$(TARGET): build $(OBJECTS)
$(CC) -shared -o $@ $(OBJECTS)
$(CC) -MM $(SOURCES) | sed 's|^|src/|' > autodep

更简单的方法是将每个源文件的依赖项放入它自己的 .d 文件中并使用 -MMD编译源文件时生成的标志:
-include $(SOURCES:.c=.d)
CFLAGS += -MMD

$(TARGET): build $(OBJECTS)
$(CC) -shared -o $@ $(OBJECTS)

关于GCC makefile 依赖生成路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15420629/

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