Можно ли заставить Microsoft build.exe включать источники из удаленных каталогов?

StackOverflow https://stackoverflow.com/questions/411841

  •  03-07-2019
  •  | 
  •  

Вопрос

Добавление исходных файлов более чем в один каталог (например, ../../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)

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top