Я пытаюсь склеить две системы сборки вместе. Оба являются рекурсивными (правила в make-файле используют make для вызова других make-файлов для сборки компонентов проекта).
Я назову их «A» и «B», где «A» создает приложение, а «B» создает библиотеки, используемые «A».
Makefile верхнего уровня в A вызывает make TARGET=whatever, что означает, что все рекурсивно вызываемые биты сборки наследуют значение 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.