Можно ли заставить Microsoft build.exe включать источники из удаленных каталогов?
Вопрос
Добавление исходных файлов более чем в один каталог (например, ../../source.cpp или ../../../somewhere_else/source.cpp, а не просто source.cpp или ../source. cpp) объявление SOURCES = в сборке WDK / DDK приводит к следующей ошибке:
Ignoring invalid directory prefix in SOURCES= entry
Можно ли включить в сборку удаленные исходные файлы?
Решение
Это невозможно сделать напрямую. build
явно предназначен только для работы с
исходный код в том же или родительском каталоге файла sources
. Он не может использовать исходные файлы из произвольных мест. В частности, его система отслеживания зависимостей, кажется, не в состоянии анализировать и отслеживать удаленные файлы, и поэтому она явно проверяет и обеспечивает, чтобы все файлы были локальными.
Есть два общих решения:
<Ол> Создайте удаленный код как отдельную библиотеку (либо с помощью другого подпроекта / каталога в том же проекте build
, либо с помощью независимого этапа сборки).
Поместите локальную заглушку для каждого файла удаленного источника, которая выполняет #include " ../../ remote_source.cpp
, и добавьте эту локальную заглушку в SOURCES = Вместо этого
. Это будет работать, но build
/ nmake
не отслеживает зависимости в remote_source.cpp
. Если remote_source.cpp
изменится, вам придется либо коснуться
локального источника прокси, либо принудительно перестроить (удалить локальный объект прокси, запустить build
с -cZ
или иным способом).
Другие советы
Альтернативный способ - использовать source.inc для включения этих файлов.
Ненавижу воскрешать очень старую тему, но я тоже натолкнулся на это.
Альтернативным альтернативным способом является создание другого исходного файла внутри, который создает исключительно объектные файлы удаленного источника, то есть в основном это файл с именем where_else \ sources , и присваивает ему тот же промежуточный каталог. Р>
Затем добавьте файл «dirs» в исходный каталог и укажите эту удаленную папку внутри. Затем создайте ссылку непосредственно на объектный файл, добавив что-то подобное в исходный исходный файл:
$(TARGETLIBS) = $(PROJECT_OBJ_ROOT)\$(O)\source.obj
Таким образом, вам не нужно компилировать как библиотеку lib, но build рассматривает ее как единое целое и ссылки без какой-либо проверки зависимостей или заботы о местоположении.
Естественно, вы можете столкнуться с некоторыми проблемами, если вы укажете им тот же промежуточный каталог и то же имя исходного исходного файла (source.cpp)