如何为Automake构建变体gcrt1-cvt.o添加依赖文件?
Automake配置优化:构建指定目标文件并添加依赖
一、取消无用静态库,仅构建目标.o文件
原配置中使用lib_LIBRARIES会触发Automake生成静态库,需移除这类配置,改用自定义目标和安装规则直接编译并安装所需.o文件:
# 声明需要构建的目标文件,确保make优先处理 BUILT_SOURCES = gcrt1.o gcrt1-cvt.o # 自定义安装规则:将编译好的.o文件重命名并安装到指定目录 install-data-local: $(INSTALL_DATA) gcrt1.o $(DESTDIR)$(libdir)/crtMCU.o $(INSTALL_DATA) gcrt1-cvt.o $(DESTDIR)$(libdir)/crtMCU-cvt.o # 自定义清理规则:移除生成的.o文件 clean-local: -rm -f gcrt1.o gcrt1-cvt.o
二、为gcrt1-cvt.o添加依赖文件支持
Automake自动生成的.deps依赖文件依赖于编译命令中的依赖追踪参数,手动编写规则时需复用Automake的标准编译变量,确保依赖机制生效:
方法1:使用Automake内置的COMPILE变量
COMPILE变量已包含所有必要的编译参数(包括依赖追踪的DEPFLAGS),直接使用即可自动生成依赖文件:
# 标准目标gcrt1.o的编译规则(若Automake未自动生成,可手动添加) gcrt1.o: gcrt1.c $(AM_V_CC)$(COMPILE) -c -o $@ $< # 带自定义编译选项的gcrt1-cvt.o规则 gcrt1-cvt.o: gcrt1.c $(AM_V_CC)$(COMPILE) -DCVT=1 -c -o $@ $<
方法2:手动添加依赖追踪参数
如果需要更精细控制编译参数,需在命令中加入$(DEPFLAGS),同时保留Automake的标准编译定义:
gcrt1-cvt.o: gcrt1.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) \ -DCVT=1 $(DEPFLAGS) -c -o $@ $<
确保依赖追踪启用
若项目未默认开启依赖追踪,需在Makefile.am中添加:
AM_DEPFLAGS = -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo
以上配置完成后,gcrt1-cvt.o会像gcrt1.o一样生成对应的.deps依赖文件,同时不会生成无用的静态库,最终仅编译并安装指定的crtMCU.o和crtMCU-cvt.o文件。
内容的提问来源于stack exchange,提问作者emacs drives me nuts
相关产品推荐
相关产品推荐

