是否有可能使Microsoft build.exe包含来自远程目录的资源?

添加源文件多个目录(例如../../source.cpp或../../../somewhere_else/source.cpp,只是source.cpp或../source.cpp)到WDK / DDK构build中的SOURCES =声明会产生以下错误:

Ignoring invalid directory prefix in SOURCES= entry 

是否有可能在构build中包含远程源文件?

这是不可能的,直接做到这一点。 build明确只是为了处理源文件的同一目录或父目录中的sources代码。 它不能使用任意位置的源文件。 特别是,它的依赖跟踪系统似乎无法解析和跟踪远程文件,因此它明确检查并强制所有文件都是本地的。

有两个常见的解决方案:

  1. 将远程代码构建为单独的lib(或者通过同一build项目中的另一个子项目/目录,或者使用独立的构建步骤)。

  2. 为每个远程源文件放置一个本地存根,它执行#include "../../remote_source.cpp ,然后把这个本地存根加到SOURCES=列表中,这样做可以,但是build / nmake 不会跟踪依赖remote_source.cpp 。如果remote_source.cpp更改,则必须touch本地代理源,否则强制重建(删除本地代理obj,使用-cZ运行build或其他方式)。

另一种方法是使用source.inc来包含这些文件。

讨厌复活一个超古老的话题,但我也碰到过这个问题。

另一种替代方法是创建另一个源文件,它只是建立远程源文件的目标文件,所以基本上是一个名为somewhere_else \ sources的文件,并给它一个相同的中间目录。

然后将“dirs”文件添加到您的原始目录中,并在其中指定该远程文件夹。 然后直接链接到目标文件,通过添加这样的东西到原始的源文件:

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

这样,你不必编译为一个库,但建设对待它像一个和链接没有任何依赖检查或照顾的位置。

当然,如果你给它们相同的中间目录和相同的原始源文件名(source.cpp),你可能会碰到一些问题。