2009-01-04 70 views
4

將源文件添加到多個目錄(例如../../source.cpp或../../../somewhere_else/source.cpp,而不僅僅是source.cpp或../source.cpp ),以在一個WDK/DDK版本所SOURCES =聲明產生以下錯誤:是否有可能使Microsoft build.exe包含來自遠程目錄的資源?

Ignoring invalid directory prefix in SOURCES= entry 

是否有可能包括在構建遠程源文件?

回答

5

這是不可能的直接做到這一點。 build明確地僅用於處理sources文件的同一目錄或父目錄中的 源代碼。它不能使用任意位置的源文件。特別是,它的依賴跟蹤系統似乎無法解析和跟蹤遠程文件,因此它明確檢查並強制所有文件都是本地的。

有兩種常用的解決方案:

  1. 建立遠程代碼作爲一個單獨的LIB(通過在同一build項目,或者使用獨立的構建步驟另一個子項目/目錄)。

  2. 爲每個遠程源文件放置一個本地存根(#include "../../remote_source.cpp),並將此本地存根添加到SOURCES=列表中。這將工作,但build/nmake而不是軌跡依賴關係在remote_source.cpp。如果remote_source.cpp發生更改,則必須要麼touch本地代理源,要麼強制重建(刪除本地代理obj,使用-cZ或其他方式運行build)。

1

另一種方法是使用source.inc來包含這些文件。

0

討厭復活一個超古老的話題,但我也碰到過這個問題。

一種替代另一種方法是創建另一個源文件中,是專爲建立對象的遠程源的文件,所以基本上是一個文件名爲somewhere_else \源,並給它相同的中間目錄。

然後添加一個'dirs'文件到您的原始目錄並指定裏面的遠程文件夾。然後直接通過添加像這樣原來的源鏈接到目標文件文件:

$(TARGETLIBS) = $(PROJECT_OBJ_ROOT)\$(O)\source.obj 

這樣,您就不必編譯爲lib中,但對待建設像一個和鏈接,沒有任何依賴性檢查或照顧地點。

當然,你可能會遇到一些問題,如果你給他們同樣的中間目錄和相同的原始源文件名(source.cpp)

相關問題