C 包含嵌套.h文件的项目的makefile
假设C 包含嵌套.h文件的项目的makefile,c,makefile,C,Makefile,假设a1.c和a2.c包括a.h,而a.h本身又包括b.h。因此a1.c和a2.c间接依赖于b.h 现在,如果b.h被修改,我希望makefile编译这两个.c文件。一种方法是将b.h与a.h一起添加到每个规则的依赖项列表中。但我觉得当项目变得越来越大、越来越复杂时,这可能会使事情变得有些复杂。另一种方法是在b.h发生变化时,为touchinga.h添加规则。(我没有试过后者) 处理makefile中嵌套依赖项的最佳方法是什么 我所说的“最佳方式”是指: makefile尽可能紧凑和简单 每个.
a1.c
和a2.c
包括a.h
,而a.h本身又包括b.h
。因此a1.c
和a2.c
间接依赖于b.h
现在,如果b.h
被修改,我希望makefile编译这两个.c文件。一种方法是将b.h
与a.h
一起添加到每个规则的依赖项列表中。但我觉得当项目变得越来越大、越来越复杂时,这可能会使事情变得有些复杂。另一种方法是在b.h
发生变化时,为touch
inga.h
添加规则。(我没有试过后者)
处理makefile中嵌套依赖项的最佳方法是什么
我所说的“最佳方式”是指:
gcc-MM*.c
将根据需要输出依赖项
a1.o: a1.c a.h b.h
a2.o: a2.c a.h b.h
这又可以作为内置规则(指定CC和CFLAGS宏)按原样使用
避免在每次更改后手动重新生成Mag文件,考虑使用CGuide和/或IDE。
gcc-MM*.c
将根据需要输出依赖项
a1.o: a1.c a.h b.h
a2.o: a2.c a.h b.h
这又可以作为内置规则(指定CC和CFLAGS宏)按原样使用
避免在每次更改后手动重新生成Mag文件,考虑使用CGuide和/或IDE。 三,。从编译器自动生成依赖项信息,并将其包含在Makefile中。可能的重复项(或者您可以跨入21世纪,开始使用带有自动项目管理的IDE,然后专注于编程…)在这种情况下,您需要将编译器指定为Make能够发现源文件的所有头依赖项的唯一方法,除非您手动编写它们(这是不切实际的),否则就是利用编译器的自动依赖项生成功能。@Lundin,makefiles仍然很常见,尽管由GNU Autotools等工具提供动力。从编译器自动生成依赖项信息,并将其包含在Makefile中。可能的重复项(或者您可以跨入21世纪,开始使用带有自动项目管理的IDE,然后专注于编程…)在这种情况下,您需要将编译器指定为Make能够发现源文件的所有头依赖项的唯一方法,除非您手动编写它们(这是不切实际的),否则就是利用编译器的自动依赖项生成功能。@Lundin,makefiles仍然很常见,虽然由GNU Autotools等工具提供动力,但效果良好。但是如果我没有使用GCC呢?我的问题更多的是关于makefile系统自身的能力。@Arham Make在任何意义上都不是C语言处理器。它没有能力像C预处理器那样解析C源文件,它必须这样做才能发现C源文件的头文件依赖关系。换句话说,make是一种工具,它可以获取任何类型的“源”文件,对照“目标”文件检查其时间戳,并在这些文件过期时运行某些命令(“配方”)。就这样,就这样。它是完全通用的,没有特殊的功能来解析任何类型的源代码。但是如果我没有使用GCC呢?我的问题更多的是关于makefile系统自身的能力。@Arham Make在任何意义上都不是C语言处理器。它没有能力像C预处理器那样解析C源文件,它必须这样做才能发现C源文件的头文件依赖关系。换句话说,make是一种工具,它可以获取任何类型的“源”文件,对照“目标”文件检查其时间戳,并在这些文件过期时运行某些命令(“配方”)。就这样,就这样。它是完全通用的,没有解析任何类型源代码的特殊功能。