我正在尝试将两个构建系统粘合在一起。两者都是递归的(makefile 中的规则使用 make 来调用其他 makefile 来构建项目的组件)。
我将它们称为“A”和“B”,其中“A”构建应用程序,“B”构建“A”使用的库。
A中的顶级makefile调用'make TARGET=whatever',这意味着构建的所有递归调用位都继承TARGET的值作为只读变量,包括来自B的构建系统,它被称为递归构建。
我不希望这种情况发生在“B”(来自不同项目)的构建系统中,因为那里的 makefile 将 TARGET 用于自己的目的,并且构建失败,因为 TARGET 具有错误的值并且是只读的。
我只能看到两种解决方案,这两种解决方案都不是可取的;
1) 将 TARGET 重命名为 A 中设置它的 makefile 和 A 中使用它的 makefile 中的其他内容,以避免与构建系统的较低级别发生冲突。
2) 在 B 中设置了 TARGET 变量的 makefile 中的任何地方使用“覆盖”指令,以覆盖其只读状态。
有人有更好的想法吗?- 理想情况下,我不希望B 的构建系统从 A 继承任何东西,除了我从 A 明确传递给 B 构建系统的那些选项。
顺便说一句,我正在使用 GNU Make v3.80。