![]() |
1
18
答案在
GCC manual
使用
|
![]() |
2
38
我假设您使用的是GNU make和GCC。首先添加一个变量来保存依赖文件列表。假设您已经有一个列出了我们所有的来源:
然后在makefile中包含生成的依赖项:
然后添加此模式规则:
“$@”是目标(位于:)左侧的内容,“$<”是前提条件(位于:)右侧的内容)。表达式“$(<:.c=.o)”将.c扩展名替换为.o。 这里的诀窍是通过两次添加-mt来生成具有两个目标的规则;这使得.o文件和.d文件都依赖于源文件及其头文件;这样,每当任何相应的.c或.h文件发生更改时,依赖文件都会自动重新生成。 -mg和-mp选项可以防止make在缺少头文件时出错。 |
![]() |
3
10
你可能会喜欢这个简短版本的唐·麦考奇的回答:
添加
不需要单独的模式规则来生成依赖文件。简单添加
|
![]() |
4
3
详细介绍了德根蒂的答案,这对我来说很有效:
这也适用于只有一个依赖文件包含所有源文件的依赖规则的情况。 |
![]() |
5
1
好的,只是为了确保我的问题是正确的:我假设您有test.c,其中包括test.h,并且您希望生成subdir/test.d(while 不 生成subdir/test.o),其中subdir/test.d包含
而不是
这就是你现在得到的。对吗? 我想不出一个简单的方法来做你想要的。但是,看看 http://www.gnu.org/software/gcc/news/dependencies.html ,如果要在生成.o文件时创建.d文件,可以使用
(给定src=test.c,subdir=subdir,obj=test.o)这将创建subdir/test.o和subdir/test.d,其中subdir/test.d包含上述所需的输出。希望有帮助。 |
![]() |
6
0
如果GCC有理由这么做,我不知道这是什么。最后,我们通过sed传递依赖项输出,将所有出现的.o重写为$objdir/.o。 |
![]() |
7
0
|
|
recursivePython · C#发布中不包含依赖项 6 年前 |
![]() |
ChumboChappati · UML:组合或依赖 6 年前 |
![]() |
PCL · 使用Nexus工件库的多项目gradle构建 6 年前 |
![]() |
novafluff · 依赖于打包为war的模块,需要类 6 年前 |