如何使用gcc为可执行文件(链接期间)生成依赖文件

如何使用gcc为可执行文件(链接期间)生成依赖文件,gcc,makefile,build-automation,Gcc,Makefile,Build Automation,gcc有-M-类选项(-MMD,-MF等),允许在编译源文件期间生成依赖项文件。依赖项文件包含Makefile规则,描述生成的对象文件所依赖的源文件和头。依赖项文件可能包含在Makefile中,然后make将在头更改时自动重新编译源文件 我需要一个类似的选项,但用于在链接可执行文件期间生成依赖项文件。依赖项文件应包含用于链接可执行文件的库的列表,因此,如果更新了任何库,make将自动重新执行可执行文件的链接 我尝试使用相同的标志(-MMD,-MF),但它们不适用于链接。它们似乎只用于在编译过程中

gcc有
-M
-类选项(
-MMD
-MF
等),允许在编译源文件期间生成依赖项文件。依赖项文件包含Makefile规则,描述生成的对象文件所依赖的源文件和头。依赖项文件可能包含在Makefile中,然后make将在头更改时自动重新编译源文件

我需要一个类似的选项,但用于在链接可执行文件期间生成依赖项文件。依赖项文件应包含用于链接可执行文件的库的列表,因此,如果更新了任何库,make将自动重新执行可执行文件的链接

我尝试使用相同的标志(
-MMD
-MF
),但它们不适用于链接。它们似乎只用于在编译过程中生成依赖项文件


为可执行文件生成依赖项文件还有其他标志或方法吗?

到目前为止,我还没有找到为可执行文件生成依赖项文件的专用gcc选项,但找到了
--trace
选项(
-Wl,--trace
与gcc一起使用时)。此选项在链接期间生成。其输出具有下一种格式:

gcc -Wl,--trace myprog.c -o myprog -L. -lmylib
-lmylib (./libmylib.a)
-lgcc_s (/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/libgcc_s.so)
...
然后,可以使用sed将库列表转换为Makefile规则:

因此
myprog.dep
将包含以下内容:

myprog: \
./libmylib.a \
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/libgcc_s.so \
...
此依赖项文件可能包含在Makefile中,如果更新了任何库,make将重新链接
myprog

依赖项文件不包含对象文件列表,但对象文件通常在Makefile脚本中已知,无需编译器帮助:

myprog: $(OBJS)
    gcc -Wl,--trace $^ -o myprog -L. -lmylib | sed -n 's/.*(\(.*\)).*/\1 \\/p' >> myprog.dep
myprog: $(OBJS)
    gcc -Wl,--trace $^ -o myprog -L. -lmylib | sed -n 's/.*(\(.*\)).*/\1 \\/p' >> myprog.dep