문제

따라서 GNU Make 's $ (WildCard) 함수에는 디렉토리를 Windows에서 열어 두는 데 문제가있는 것 같습니다. (unasnwered) 게시물을 참조하십시오. "Make는 디렉토리를 열고 있습니다". Google 은이 주제에 대한 많은 정보를 제공하지 않습니다.

요컨대 : MakeFile은 어느 시점에서 $ (와일드 카드) 함수를 사용하고 디렉토리를 열어 두며, 이는 일반적으로 "Clean Make"규칙이 올바르게 작업을 수행하지 못하게합니다. 두 번째로 "깨끗하게 만들기"를 다시 실행하면 일반적으로 해결됩니다.

표준 DOS 박스 아래에서 GNU Make 버전 3.81을 사용하고 있습니다. 위에 링크 된 게시물의 저자는 Cygwin을 사용하고 있습니다.

누구든지 이것에 대한 해결책을 찾은 사람이 있습니까?

도움이 되었습니까?

해결책 2

나는 찾았다 해결 방법 최소한 평화롭게 일할 수있는 문제로 인해 문제가 있습니다.

문제는 $(wildcard) 기능은 소스 파일을 수집하는 데 사용되었습니다. 그러나 나의 깨끗한 규칙은 디렉토리 만 삭제합니다. 수집이 필요하지 않습니다. 따라서 기본적으로 조건부 명세서에서 소스 파일을 수집 해야하는 MakeFile의 일부를 넣습니다.

# The clean rule is always parsed
clean:
    rm -rf $(OUTPUT_DIRECTORY)

# The compile rule is only interpreted if we did not invoke 'make clean'. We
# can test the value of $(MAKECMDGOALS) for that:
ifeq ($(filter $(MAKECMDGOALS),clean),)

SOURCE_FILES := $(wildcard ...)

compile:
    g++ $(SOURCE_FILES) ...

endif

다른 팁

파일 디스크립터 누출처럼 들립니다. 유니어에서는 매우 단호한 프로세스 (예 : Make)의 경우 무해하지만 Windows의 오른쪽 Pita.

이것은 Make의 버그로, 사용법 문제와는 달리, 최신 업스트림 버전의 소스에서 구축 된 후에도 여전히 존재하는지 확인하여 먼저 해결해야합니다. 버그 보고서 제출 GNU를 사용하여 프로젝트 (또는 적절한 지원 계약을 체결 한 유통 업체와 함께) 또는 소스로 뛰어 들어 직접 수정하려고 시도합니다.

Linux에서 재생산하는 것은 아프지 않을 것입니다. 파일 디스크립터 누출을 확인하는 것이 훨씬 쉽습니다. /proc/self/fd (또는 제조업체의 자녀를 위해 /proc/$PPID/fd) 소속되지 않은 것들.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top