4

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

Ignoring invalid directory prefix in SOURCES= entry

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

4

3 回答 3

5

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

有两种常见的解决方案:

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

  2. 为执行的每个远程源文件放置一个本地存根#include "../../remote_source.cpp,然后将此本地存根添加到SOURCES=列表中。这将起作用,build/nmake不会跟踪. 如果发生更改,您将不得不使用本地代理源,或者以其他方式强制重建(删除本地代理 obj、使用运行或其他方式)。remote_source.cppremote_source.cpptouchbuild-cZ

于 2009-01-04T22:57:50.393 回答
1

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

于 2011-01-30T08:02:14.390 回答
0

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

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

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

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

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

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

于 2013-07-30T21:25:58.983 回答