我正在維護一個包含數百個 C 和 C 檔案的跨平臺專案 (Linux/Windows/32/64)。為此,我使用了一個使用 GNU Make 的 makefile。我在 Windows 中編譯時會出現問題,因為 Visual Studio (cl) 編譯器強制我通過呼叫 vcvarsall.bat [platform_type] 來設定環境,并且每次編譯一個檔案時都會執行此程序,而整個程序在時間。
部分生成檔案
# C object file generation rule
../int/$(PROJECT)/%.o: ../%.c
ifeq ($(OS),Windows_NT)
@vcvarsall.bat x86 & cl $(CFLAGS) -c $(subst /,\,$<)
else
@gcc $(CFLAGS) -c $<
endif
每當編譯每個檔案時,就會執行陳述句 @vcvarsall.bat x86。有沒有辦法讓這個陳述句只執行一次并且所有連續的shell都繼承這個?
謝謝 !
uj5u.com熱心網友回復:
毫無疑問,這是 Windows 開發中真正令人討厭的事情之一。
外殼在退出后不可能將其值“傳遞”到下一個外殼。make 也無法啟動單個 shell,然后在該 shell 中運行所有規則的配方。
您所能做的就是在父 shell 中設定一次值,然后從那里呼叫 make。執行此操作的最簡單方法是創建一個.bat執行正確操作的檔案,然后呼叫 make。您可以在 POSIX 系統上擁有一個名稱相似的 shell 腳本,它除了呼叫 make 之外什么都不做。
如果您真的不想這樣做,那么唯一的選擇是使用遞回 make 呼叫,其中頂級 make 將運行vcvarsall腳本,然后呼叫將編譯所有內容的子 make。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/335569.html
