Разница между вызовом командной строки напрямую или из makefile

#command-line #makefile #mingw

#командная строка #makefile #mingw

Вопрос:

У меня запутанная проблема, связанная с mingw make и командной строкой Windows (Win7):

У меня есть makefile, который должен вызывать файл vbs для преобразования файлов .vds в файлы .png. вот код makefile (без определенных переменных, вы можете увидеть результат на рисунке ниже).

 VSD2PNG: $(VISIO_OUTPUT)
    @echo *** converting visio files to png files finished


define vsd_rule
$(1): $(call FILTER_FUNCTION,$(basename $(notdir $(1))),$(VISIO_FILES))
    $(VSD_SCRIPT) $$< $(VISIO_OUTPUT_DIR)
endef
$(foreach file,$(VISIO_OUTPUT),$(eval $(call vsd_rule,$(file))))
  

приводит к

введите описание изображения здесь

Как вы можете видеть, команда должна вызывать .tools visio convert(.vbs) с двумя аргументами (входной файл и выходной каталог). Удивительно то, что одна и та же команда, выполняемая в командной строке Windows, работает нормально. Я попробовал некоторые модификации для решения проблемы (безуспешно):

  • добавление расширения файла в vbs-script приводит к ошибке 193, но я не могу выяснить, что это значит.
  • вызов скрипта без каких-либо аргументов должен привести к ошибке времени выполнения в скрипте, но это снова приведет к ошибке-1 (или с расширением файла 193).
  • использование абсолютного пути для скрипта

Кто-нибудь знает больше о различиях между вызовом скрипта непосредственно из командной строки или из makefile, который обычно должен приводить к командной строке?

Комментарии:

1. Что происходит, когда вы пытаетесь сделать что-то более простое?

2. Смотрите второй пункт списка: я пытался вызвать только скрипт vbs без каких-либо аргументов. Это должно привести к ошибке времени выполнения скрипта vbs, но этого не происходит. Поэтому я думаю, что он не может найти скрипт.

3. Я не знаком с MinGW, поэтому не могу сразу диагностировать проблему, но я могу предложить несколько экспериментов. Опубликуйте простейший makefile, который выдает ошибку. Попробуйте вызвать из правила скрипт, который на самом деле не существует, и посмотрите, выдает ли он ту же ошибку. Попробуйте вызвать a HelloWorld с тем же путем или реальный скрипт в рабочем каталоге.

4. использование целевого объекта, содержащего только вызов функции, приводит к тем же проблемам. Вызов другой программы (.exe) приводит к нормальному поведению. Возможно ли, что вы не можете запустить скрипт .vbs из make?

5. Можете ли вы подготовить минимальный полный пример ?