2013-12-18 3 views
2

Я пытаюсь запустить два cmd-файла из события post-build проекта Delphi 2007.Можно ли вызвать несколько событий после сборки в Delphi 2007?

Построенные события настроены так:

..\..\buildtools\postbuild.cmd $(OUTPUTDIR)$(OUTPUTNAME) 
..\copydlls.cmd $(OUTPUTDIR) 

Первый из них работает отлично, второй, кажется, никогда не дозвонились вообще.

Если изменить порядок так:

..\copydlls.cmd $(OUTPUTDIR) 
..\..\buildtools\postbuild.cmd $(OUTPUTDIR)$(OUTPUTNAME) 

Опять же, только первый из них выполняется.

Является ли это известным ограничением/ошибкой Delphi 2007 или я что-то не так здесь делаю? (я мог бы поклясться, что это используется для работы в прошлом.)

EDIT: Я нашел обходной путь:

%comspec% /c ..\..\buildtools\postbuild.cmd $(OUTPUTDIR)$(OUTPUTNAME) 
%comspec% /c ..\copydlls.cmd $(OUTPUTDIR) 

Это работает, как ожидалось. Все еще странно.

EDIT2: Существует еще один вариант, я нашел в this ответ на StackOverflow:

call ..\..\buildtools\postbuild.cmd $(OUTPUTDIR)$(OUTPUTNAME) 
call ..\copydlls.cmd $(OUTPUTDIR) 

Я думаю (не попробовав его), то есть это проблема, только если событие сборки является CMD-файл и предыдущий опыт, который я привел выше, не называл cmd-файлы, а исполняемые файлы.

ответ

2

Я думаю обходной путь я добавил в EDIT2 это тот, который должен быть использован, поэтому я добавляю это как ответ сам:

При вызове CMD файлов (вероятно, также летучая мышь-файлы) «вызов» должен быть добавляется перед ним:

call ..\..\buildtools\postbuild.cmd $(OUTPUTDIR)$(OUTPUTNAME) 
call ..\copydlls.cmd $(OUTPUTDIR) 
0

проблема вы сталкиваетесь можно понять из documentation для команды call.

Вызов

Вызывает одну пакетную программу из другой без остановки родительского Пакетное программы.

Другими словами, если опустить call при выполнении подпрограммы, то пакетная программа родитель останавливается, когда возвращается к югу от программы.

Итак, вы должны использовать call для выполнения подпрограмм в ваших действиях сборки.

Update

я не упомянул об этом первый раз вокруг, но заложенная в выше является то, что строить действия выполняются с помощью командного интерпретатора, cmd.exe.

+0

Это означает, что события сборки выполняются как пакетная программа. Это где-то документировано? – dummzeuch

+0

Я не уверен, что он задокументирован. Я знаю, что он так смотрел CMD.Процессы exe мерцают в жизнь как подпроцессы bds.exe в дереве дерева процесса. Но я не могу найти документы, которые утверждают это. Во всяком случае, это хороший момент, который вы делаете, и я принял это как должное в своем ответе. Я исправил это сейчас. –

 Смежные вопросы

  • Нет связанных вопросов^_^