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