Когда у вас есть макросы в Makefile для базового синтаксиса определения или включения вещей (НЕ в зависимости или действия), эти макросы раскрываются сразу по мере чтения make-файла. Это действительно имеет смысл, так как make необходимо расширить их, чтобы понять, что читать. Но из-за этого важен порядок определений правил, в частности, другие макросы, которые будут определены позже в файле, еще не будут определены и будут расширяться как пустые.
В вашем примере это происходит с function
- когда make идет на выполнение foreach
, function
еще не определено как что-либо, поэтому оно заканчивается расширением до нуля. Таким образом, в конечном итоге вы не включаете ни один из необходимых подфайлов.
Переместить строку $(foreach
... ПОСЛЕ define function
/ endef
Кроме того, вам не нужны дополнительные eval
вызовы внутри функции (хотя в этом случае они, вероятно, ничего не повредят, они могут привести к неожиданным результатам, если VAR2
или VAR4
расширятся до чего-либо с помощью $
в нем.)