Solução alternativa para o erro de avaliação do GNU Make 3.80

Estou tentando criar um modelo de construção genérico para meus Makefiles, como eles discutem nodocumentação de avaliação.

Eu encontrei um bug conhecido com o GNU Make 3.80. Quando $ (eval) avaliar uma linha com mais de 193 caracteres, faça falhas com o erro "Memória virtual esgotada".

O código que tenho que causa o problema se parece com isso.

SRC_DIR = ./src/

PROG_NAME = test

define PROGRAM_template
  $(1)_SRC_DIR = $(SRC_DIR)$(1)/
  $(1)_SRC_FILES = $(wildcard $($(1)_SRC_DIR)*.c)
  $(1)_OBJ_FILES = $($(1)_SRC_FILES):.c=.o)

  $($(1)_OBJ_FILES) : $($(1)_SRC_FILES) # This is the problem line
endef

$(eval $(call PROGRAM_template,$(PROG_NAME)))

Quando executo esse Makefile, recebo

gmake: *** virtual memory exhausted.  Stop.

A saída esperada é que todos os arquivos .c em ./src/test/ sejam compilados em arquivos .o (através de uma regra implícita).

O problema é que $ ($ (1) _SRC_FILES) e $ ($ (1) _OBJ_FILES) estão juntos com mais de 193 caracteres (se houver arquivos de origem suficientes).

Eu tentei executar o arquivo make em um diretório onde existem apenas 2 arquivos .c, e funciona bem. É somente quando há muitos arquivos .c no diretório SRC que recebo o erro.

Eu sei que o GNU Make 3.81 corrige esse bug. Infelizmente, não tenho autoridade ou capacidade para instalar a versão mais recente no sistema em que estou trabalhando. Estou preso com 3,80.

Então, há alguma solução alternativa? Talvez divida $ ($ (1) _SRC_FILES) e declare cada dependência individualmente dentro da avaliação?

questionAnswers(2)

yourAnswerToTheQuestion