Можно ли заставить Microsoft build.exe включать источники из удаленных каталогов? - PullRequest
4 голосов
/ 05 января 2009

Добавление исходных файлов более чем в один каталог (например, ../../source.cpp или ../../../somewhere_else/source.cpp, а не просто source.cpp или ../source. cpp) к объявлению SOURCES = в сборке WDK / DDK выдается следующая ошибка:

Ignoring invalid directory prefix in SOURCES= entry

Можно ли включить в сборку удаленные исходные файлы?

Ответы [ 3 ]

5 голосов
/ 05 января 2009

Невозможно сделать это напрямую. build явно предназначен только для работы с исходный код в том же или родительском каталоге файла sources. Он не может использовать исходные файлы из произвольных мест. В частности, его система отслеживания зависимостей, похоже, не в состоянии анализировать и отслеживать удаленные файлы, и поэтому она явно проверяет и обеспечивает, чтобы все файлы были локальными.

Существует два распространенных решения:

  1. Создание удаленного кода в виде отдельной библиотеки (либо с помощью другого подпроекта / каталога в том же проекте build, либо с использованием независимого этапа сборки).

  2. Поместите локальную заглушку для каждого файла удаленного источника, которая выполняет #include "../../remote_source.cpp, и вместо этого добавьте эту локальную заглушку в список SOURCES=. Это будет работать, но build / nmake будет не отслеживать зависимости в remote_source.cpp. Если remote_source.cpp изменится, вам потребуется либо touch локальный прокси-источник, либо принудительно перестроить (удалить локальный прокси-объект obj, запустить build с -cZ или другим способом).

1 голос
/ 30 января 2011

Альтернативным способом является использование source.inc для включения этих файлов.

0 голосов
/ 31 июля 2013

Ненавижу возрождать супер старую тему, но я тоже столкнулся с этим.

Альтернативным альтернативным способом является создание другого исходного файла внутри, который создает исключительно объектные файлы удаленного источника, поэтому в основном это файл с именем where_else \ sources , и присваивает ему тот же промежуточный каталог.

Затем добавьте файл «dirs» в исходный каталог и укажите эту удаленную папку внутри. Затем сделайте ссылку непосредственно на объектный файл, добавив что-то вроде этого в исходный исходный файл:

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

Таким образом, вам не нужно компилировать как lib, но build рассматривает его как единое целое и ссылки без какой-либо проверки зависимостей или заботы о местоположении.

Естественно, вы можете столкнуться с некоторыми проблемами, если вы дадите им тот же промежуточный каталог и то же имя исходного исходного файла (source.cpp)

...