首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动生成makefile先决条件(gnu-make)

自动生成makefile先决条件(gnu-make)
EN

Stack Overflow用户
提问于 2012-01-30 09:26:22
回答 1查看 1.3K关注 0票数 0

在我的一个makefile中有一个变量,其中包含需要生成以下格式的归档文件的列表:

代码语言:javascript
复制
/libpath/mylib1/obj/mylib1.a
/libpath/mylib2/obj/mylib2.a
/libpath/mylib3/obj/mylib3.a

诸若此类。我已经建立了一个规则来创建它们,基本上它会扫描父文件夹中的.cpp文件,并在mylib1子文件夹中创建.o先决条件(所以如果/ /obj /mylib1包含foo.cpp和bar.cpp,那么先决条件是/libpath/mylib1/obj/foo.o和/libpath/mylib1/obj/bar.o等等)。我能做到这一点的唯一方法是使用.SECONDEXPANSION:我创建一个.cpp文件列表,去掉文件夹和扩展名,在它后面加上.o扩展名,然后在它前面加上目标文件夹:

代码语言:javascript
复制
%.a: $$(addprefix $$(dir $$@),$$(addsuffix .o,$$(basename $$(notdir $$(wildcard $$(dir $$@)../*.cpp)))))

这工作得很好,但我不禁觉得我正在以一种过于复杂的方式来处理这件事。有没有更好/更干净的方法来做这样的事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-30 18:56:57

我只建议将逻辑提取到宏中,并使用后者作为先决条件。另外,我更喜欢patsubst function而不是notdir + basename + addsuffix,更喜欢$(@D) automatic variable而不是$(dir $@)

代码语言:javascript
复制
lib_objects = $(patsubst %.cpp,$(@D)/%.o,$(notdir $(wildcard $(@D)/../*.cpp)))

%.a: $$(lib_objects)

IMO,看起来好多了,不是吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9058421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档