2
환경 변수를 통해 버전 정보를 수집하는 gnu Makefile이 있습니다. 이제는 어떤 대상이 gnumake 구문을 사용하여 빌드되기 전에 "무언가"를 전역 적으로 수행하려고합니다. 의사 코드,이 의미 : 지정된 파일이 존재하는 경우에Gnu에서 일부 명령을 실행하는 방법 Makefile
- 는, 캐릭터 라인의 배열을 통해 그것을
- 실행을 삭제하고 나는이 시도
지정된 파일에 자신의 값을 넣어 :
C:\temp\Makefile.mak:72: *** missing separator. Stop.
0 :
$(shell if exist $(subst /,\,$(products)filenames.h) del /F/Q $(subst /,\,$(products)filenames.h))
$(foreach Item, $(EnvFilenames), @echo $(Item) >> $(subst /,\,$(products)filenames.h))
이 나에게 오류를 제공
여기서 72 행은 $(shell ...
행입니다. 나는 define
섹션에 넣고 경우
$(products)$test.o : test.c $(commons)
$(call foobar)
$(cc) $(cflags_m) test.c [email protected]
을하고 ...하지만 최대한 빨리 원하는대로 전화를해야하는지 수행합니다
define foobar
$(shell if exist $(subst /,\,$(products)filenames.h) del /F/Q $(subst /,\,$(products)filenames.h))
$(foreach Item, $(EnvFilenames), @echo $(Item) >> $(subst /,\,$(products)filenames.h))
endef
와 대상이 전화, 그것을 잘 실행 그것도 다른 define
의 내부에서, 누락 된 분리 자와 함께 다시 실패합니다.
무슨 뜻이며 어떻게 해결할 수 있습니까?
컴파일은 Win32 플랫폼에서 수행되며 멀티 플랫폼 일 필요는 없습니다.
'IGNORE : ='를 제거한 경우에만 이것은 실행되지 않습니다. 하지만 그때 설명 된 오류가 발생합니다. 그런데 Make 3.82 사용하기. – Coder02
여기에서 작동합니다 (예 : 'IGNORE : = $ (shell rm foobar)'는 당신이 호출하는 대상에 상관없이 foobar를 삭제합니다. ":"과 "="사이에 공백을 넣지 않았습니까? – Jens
비고 : 명령을 배치 파일이나 셸 스크립트에 작성하고'IGNORE : = $ (shell foo.bat)'처럼 호출하여 정신 이상을 최소화 할 수 있습니다. –