2013-10-25 67 views
0

我有一個Windows下的C-Project,它使用makefile構建。 現在我注意到,在調用gmake之後,需要等待大約40秒,直到發生任何事情(直到此時沒有生成輸出並且什麼都沒有發生)。gmake在開始工作之前反覆創建並刪除批處理文件

我然後用-d標誌找到這個問題的根源 - 用該標誌運行gmake生成那些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 

該操作被再次和再次發生用於第一40秒(同一個bat-file一遍又一遍)。 蝙蝠文件本身含有這樣的:

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

我不認爲這種行爲是正常的 - 我的意思是它只是創建相同的文件一遍又一遍 - 我不知道(是嗎?)看到這裏的任何意義。 這個問題只是我每次嘗試編譯它的時候(不必要地丟失)。

回答

2

請提供您使用的工具的版本(在本例中爲GNU make),以及Windows的版本以及您如何構建Windows命令(cygwin,mingw,MSVC等)

make絕對不會調用這樣的命令。所以這意味着你的makefile裏有一些東西在做。我建議你通過makefile查找包含該命令的行。

我懷疑的是,當你找到它,它會是這樣的:

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

這會在每次變量用於時間重新評估右側。所以如果你使用那個變量20次,它會運行那個命令20次。

=更改爲:=當定義該變量時,將強制該命令運行一次。

您也可以考慮使用make的內置$(wildcard ...)函數,該函數比dir更快更便攜。

+0

剛剛檢查,這正是你在說什麼。問題的其餘部分是「針對特定項目的」,但至少我現在知道發生了什麼以及我必須在哪些方面改變某些事情! – Toby

相關問題