eval documentation에서 논의하는 것처럼 Makefile에 대한 일반 빌드 템플릿을 만들려고합니다.GNU Make 3.80 평가 버그에 대한 대안
나는 GNU Make 3.80에서 알려진 버그를 경험했다. $ (eval)이 193자를 넘는 행을 평가할 때 Make는 "Virtual Memory Exhausted"오류와 충돌합니다.
문제의 원인이되는 코드는 다음과 같습니다.
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)))
나는이 Makefile을 실행하면, 내가 얻을
gmake: *** virtual memory exhausted. Stop.
예상 출력은 ./src/test/의 모든 .c 인 파일 (묵시적 규칙을 통해) .o 인 파일로 컴파일받을 것입니다 .
문제는 $$ ($ (1) _SRC_FILES)와 $$ ($ (1) _OBJ_FILES)가 193자를 넘는 것입니다 (충분한 원본 파일이있는 경우).
2 개의 .c 파일 만있는 디렉토리에서 make 파일을 실행 해 보았지만 제대로 작동합니다. SRC 디렉토리에 .c 파일이 여러 개있는 경우에만 오류가 발생합니다.
GNU Make 3.81이이 버그를 수정한다는 것을 알고 있습니다. 불행히도 필자는 현재 작업중인 시스템에 최신 버전을 설치할 수있는 권한이나 능력이 없습니다. 나는 3.80과 붙어있다.
그럼 해결 방법이 있습니까? 어쩌면 $$ ($ (1) _SRC_FILES)을 나눠서 각 종속성을 개별적으로 평가할 것입니까?
나는이 문제를 3.81 버전에서도 경험했다. (우분투 10.10) – lurscher
당신이 어떻게했는지에 대한 해결 방법이있다면. – searchengine27
또한 참조 할 수 있도록 버그 보고서 또는 ID가 있습니까? – searchengine27