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

时间:2009-01-04 22:51:33

标签: windows build wdk

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

Ignoring invalid directory prefix in SOURCES= entry

是否可以在构建中包含远程源文件?

3 个答案:

答案 0 :(得分:5)

无法直接执行此操作。 build明确设计仅用于处理 源代码在sources文件的相同或父目录中。它不能使用来自任意位置的源文件。特别是,它的依赖跟踪系统似乎无法解析和跟踪远程文件,因此它明确检查并强制所有文件都是本地文件。

有两种常见的解决方案:

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

  2. 为每个执行#include "../../remote_source.cpp的远程源文件放置一个本地存根,并将此本地存根添加到SOURCES=列表中。这样可行,但build / nmake 跟踪<{1}}中的依赖项。如果remote_source.cpp发生更改,则您必须remote_source.cpp本地代理来源,或以其他方式强制重建(删除本地代理obj,使用touch运行build,否则)。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

讨厌复活一个超级老话题,但我也遇到了这个问题。

另一种替代方法是在其中创建另一个源文件,该文件仅构建远程源的目标文件,因此基本上是名为 somewhere_else \ sources 的文件,并为其提供相同的中间目录。

然后将'dirs'文件添加到原始目录并在其中指定该远程文件夹。然后通过向原始源文件添加类似的内容直接链接到目标文件:

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

这样,您不必编译为lib,但build会将其视为一个并且链接不需要任何依赖性检查或关注位置。

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