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?