Я пытаюсь склеить две системы сборки. Оба являются рекурсивными (правила в make-файле используют make для вызова других make-файлов для создания компонентов проекта).
Я назову их «A» и «B», где «A» создает приложение, а «B» - библиотеки, используемые «A».
Makefile верхнего уровня в вызовах A вызывает make TARGET = что угодно, что означает, что все рекурсивно вызываемые биты сборки наследуют значение TARGET как переменную только для чтения, включая систему сборки из B, которая называется как часть рекурсивной сборки.
Я не хочу, чтобы это происходило в системе сборки для 'B' (которая происходит из другого проекта), поскольку там make-файлы используют TARGET для своих собственных целей, и сборка завершается неудачно, поскольку TARGET имеет неправильное значение и читается -только.
Я вижу только два решения для этого, ни одно из которых не является палитрой;
1) Переименуйте TARGET во что-нибудь другое в make-файле в A, который устанавливает его, и в make-файлах в A, которые его используют, чтобы избежать конфликта с более низкими уровнями системы сборки.
2) Используйте директиву override везде в make-файлах в B, где установлена переменная TARGET, чтобы переопределить ее состояние только для чтения.
У кого-нибудь есть идеи получше? - в идеале, я хочу, чтобы ничто не было унаследовано системой сборки B от A, кроме тех опций, которые я явно передаю в систему сборки B от A.
Кстати, я использую GNU Make v3.80.