2010-02-02 74 views
0

我正在使用不支持依賴關係生成選項(gcc中的-MM)的非GNU C編譯器。非GNU編譯器的依賴關係生成

在這個軟件中,他們沒有使用makefile。他們正在使用一些古老的Windows批處理文件來編譯和鏈接代碼。

這些批處理文件沒有增量構建。我跟蹤的批處理文件,我發現,在到底是執行這些命令:

compiler.exe -option1 -option2的* .c linker.exe -foo -bar * .OBJ

編譯需要龍時間,因爲即使沒有任何修改的文件,也必須重新編譯所有文件!

我正在尋找一個獨立的工具,從C文件生成依賴關係。但我沒有找到任何一個。

編輯:似乎我不夠清楚。我無法將批處理文件更改爲makefile,這是大事。我只是希望做一些小改動來支持漸進式建設。

編輯:所需的工具是一個獨立的工具,它從c文件生成依賴關係。

回答

1

您的項目中有兩個依賴項。

  1. C文件被編譯爲OBJ文件。
  2. C文件包含頭文件。更改的頭文件需要編譯C文件。

第一個主題可以用你的makefile中的推理規則寫出來。這允許只枚舉將用於鏈接的OBJ文件。

第二個主題是找到包含的頭文件。我不知道一個獨立的工具。但是你可以嘗試使用C預處理器編寫自己的代碼。您需要解析此命令的輸出:

cl -E -I<your_include_path> *.c | find "#line" 

用引號括起來的文件名給出了依賴關係。如果文件名以.c結尾,則是目標。在其他地方,這是一種依賴性。

+0

對不起,我先誤解了它。我會試試這個:) – Yousf 2010-02-09 09:41:03

0

爲什麼不能使Make(在Cygwin下)並創建使用您的compiler.exe作爲CC的Makefiles?

+0

如果你只是想使用make或gcc,就不需要使用cygwin。 – 2010-02-02 15:07:15

+0

沒有Cygwin,我發現Windows非常不適合開發環境。當然,你可以在沒有它的情況下運行Make,但你爲什麼要這樣做? – 2010-02-02 15:44:42

+0

問題不在makefile中。問題在於使用gcc -MM完成的依賴關係生成。 – Yousf 2010-02-02 22:33:18

0

GCC生成的依賴信息實際上是由gcc驅動程序調用的GNU make生成的。你可以從很多地方獲得GNU make的版本,包括http://www.mingw.org/wiki/msys。您也可以考慮在Windows上使用GCC - 您可以在http://tdragon.net/recentgcc獲得MinGW版本。

+0

我只想確定,如何在沒有gcc的情況下生成依賴關係? Ofcourse我可以使用GCC來生成依賴關係,但是如果有獨立的工具,它會更好。 – Yousf 2010-02-02 22:35:16