首先,标题非常通用,因为只有很多方法可以解决这个问题。但是,我正在寻找一个干净和整洁的方式。Makefile:扩展依赖关系
情况:
我有两个相等的对象文件foo.o
和foo-pi.o
,其中后者是与位置无关(与-fPIC
编译)。两者都取决于foo.h
和bar.h
。
问题:
如何在没有代码复制的情况下声明所有foo*.o
到bar.h
的相关性?
解决方案迄今:
$(shell bash -c 'echo -ne foo{-pi,}.o'): bar.h
$(addsuffix .o, $(addprefix fo, o-pi o)): bar.h
foo.o foo-pi.o: bar.h
第一个解决方案是不支持bash
系统不是便携式的,第二个是一个肮脏的解决方案,因为我无法弄清楚如何在addprefix
中使用空字符串。第三种解决方案包括我想避免的foo
的重复提及。
与其使用重命名来区分PIC和非PIC代码,考虑将这两种类型的对象放在不同的子目录中(例如'obj /'和'obj.PIC /'),并保留相同的名称。这可能会让很多你想做的事更容易...... – twalberg
是的,但规范不允许这样做。 – Danyel