我-MM在GCC中使用该标志来生成对象的makefile依赖项.makefile简要如下:
-include autodep
...
$(TARGET): build $(OBJECTS)
$(CC) -shared -o $@ $(OBJECTS)
$(CC) -MM $(SOURCES) > autodep
Run Code Online (Sandbox Code Playgroud)
源位于文件夹中src.但是,该autodep文件将包含没有相对路径的对象目标:
foo.o: src/foo.c src/foo.h
bar.o: src/bar.c src/bar.h src/baz.h
Run Code Online (Sandbox Code Playgroud)
我应该怎么把它变成这个:
src/foo.o: src/foo.c src/foo.h
src/bar.o: src/bar.c src/bar.h src/baz.h
Run Code Online (Sandbox Code Playgroud)
?
我尝试使用该-MT标志,但它似乎完全丢弃了对象目标.
-MT设置整个目标名称.如果您希望每个源使用不同的目标,则每个源需要一个不同的-MT参数,这意味着编译器和foreach循环的多次调用:
$(TARGET): build $(OBJECTS)
$(CC) -shared -o $@ $(OBJECTS)
rm autodep
$(foreach SRC,$(SOURCES),$(CC) -MM -MT $(SRC:.c=.o) $(SRC) >> autodep;)
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用sed按摩输出
$(TARGET): build $(OBJECTS)
$(CC) -shared -o $@ $(OBJECTS)
$(CC) -MM $(SOURCES) | sed 's|^|src/|' > autodep
Run Code Online (Sandbox Code Playgroud)
更容易的是将每个源文件的依赖项放入它自己的.d文件中,并-MMD在编译源文件时使用该标志生成:
-include $(SOURCES:.c=.d)
CFLAGS += -MMD
$(TARGET): build $(OBJECTS)
$(CC) -shared -o $@ $(OBJECTS)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4033 次 |
| 最近记录: |