2013-10-25 1 views
0

Windows에서 makefile로 빌드 된 C 프로젝트가 있습니다. 이제는 gmake을 호출 한 후 아무 일도 일어나지 않을 때까지 ~ 40 초가 걸렸습니다 (그때까지는 출력이 생성되지 않고 아무 것도 일어나지 않습니다). gmake는 작업을 시작하기 전에 반복적으로 배치 파일을 생성하고 삭제합니다.

나는 다음이 문제의 뿌리 찾기 위해 -d 플래그를 사용 -이 플래그 gmake 실행을 생성하는 40 초 다음과 같은 출력 :이 작업은 처음 40 다시하고 다시 일어나고

Creating temporary batch file C:\Users\User\AppData\Local\Temp\make564-1.bat 
CreateProcess(C:\Users\User\AppData\Local\Temp\make564-1.bat, C:\Users\User\AppData\Local\Temp\make564-1.bat,...) 
Cleaning up temporary batch file C:\Users\User\AppData\Local\Temp\make564-1.bat 

초 (동일한 박쥐 파일 반복해서).

@echo off 
dir /b/a-d/-W/s .\*.c .\*.s 

나는이 문제가 정상이라고 생각하지 않는다 - 나는 그냥 계속해서 또 다시 같은 파일을 생성 의미 - 그렇게하지 : 박쥐 파일 자체는이 포함 된 (또는입니까?) 이것의 의미를 보아라. 이 문제는 컴파일 할 때마다 (불필요하게 잃어버린) 시간 일뿐입니다.

답변

2

사용중인 도구의 버전 (이 경우 GNU make)과 Windows 버전 및 Windows 용 명령을 작성한 방법 (cygwin, mingw, MSVC 등)

make 이렇게 절대로 명령을 호출하지 않습니다. 그래서 그것은 당신의 메이크 파일에있는 어떤 것을 의미합니다. 나는 당신이 그 명령을 포함하고있는 라인을 찾기 위해 당신의 makefile을 조사 할 것을 제안한다. 이것은 오른쪽 에게 변수가을 사용할 때마다 다시 평가합니다

FOO = $(shell dir /b/a-d/-W/s .\\*.c .\\*.s) 

:

내 의심 당신이 그것을 발견 할 때, 이런 식으로 뭔가있을거야입니다. 따라서 해당 변수를 20 번 사용하면 20 번 명령이 실행됩니다.

=:=으로 변경하면 변수가 정의 된 명령이 한 번만 실행됩니다.

또한 dir보다 훨씬 빠르고 이동성이 뛰어난 기본 제공 $(wildcard ...) 기능을 사용하는 것이 좋습니다.

+0

방금 ​​확인한 내용과 정확히 일치합니다. 이슈의 나머지 부분은 "프로젝트에 따라 다르다"는 것이었지만, 적어도 지금 무슨 일이 일어나고 있는지, 그리고 나는 무엇인가를 바꾸어야한다는 것을 알고 있습니다. – Toby

관련 문제