如何在Libtool生成的Makefile中调用其他目录的非Libtool模块Makefile?
嗨,这事儿其实不用直接改Libtool生成的Makefile,咱们通过Makefile.am就能轻松实现,而且能保证后续重新生成Makefile时不会丢失修改。下面是具体的步骤:
1. 修改all目标的依赖
在你主项目的Makefile.am里,直接重新定义all目标,让它先构建你的新模块,再执行原来的all-am(也就是Libtool负责构建的核心部分):
all: new-module all-am
2. 添加new-module的构建规则
紧接着在Makefile.am里加上这个额外模块的构建规则,推荐用make -C的方式切换目录,比cd && make更稳妥(尤其是并行构建场景下):
new-module: $(MAKE) -C new-module-src
3. 可选:添加清理规则(方便后续维护)
如果需要让make clean也能同步清理新模块的编译产物,可以在Makefile.am里补充clean-local规则:
clean-local: $(MAKE) -C new-module-src clean
为什么这样可行?
Automake会把你在Makefile.am里定义的规则整合到最终生成的Makefile中,重新定义的all目标会覆盖默认的all: all-am规则,而new-module的自定义规则会被自动加入构建流程。这样每次运行make all时,都会先完成额外模块的构建,再执行Libtool的原有逻辑,完全不用把额外模块整合进Libtool体系里。
内容的提问来源于stack exchange,提问作者tweet
相关产品推荐
相关产品推荐

