Цикл Foreach не работает в Makefile: «Система не может найти указанный файл» - PullRequest
0 голосов
/ 07 января 2010

У меня есть Makefile следующего содержания:

NUMBERS = 1 2 3 4
lib:
    $(foreach var,$(NUMBERS),./a.out $(var);)

И это команда, которую я запускаю (в том же каталоге, что и Makefile)

make -f Makefile

Но я получил сообщение об ошибке, говорящее, что «Система не может найти указанный файл».

По предложению одного из ответов я создал следующий файл в том же каталоге, что и Makefile:

a.out
1.out
2.out
3.out
4.out

Теперь ошибка становится:

. / A.out 1; ./a.out 2; ./a.out 3; ./a.out 4; make (e = -1): ошибка -1 make: *** [lib] Ошибка -1

Примечание. Я работаю на платформе Windows XP

Ответы [ 4 ]

3 голосов
/ 07 января 2010

Цель make - создавать (и обновлять) целевые файлы, которые зависят от исходных файлов, с помощью команд.

Здесь проблема в команде, которая выполняется. Вы пытаетесь запустить (через make) команду a.out, но она не существует или не является исполняемой командой. Попробуйте заменить a.out в вашем make-файле фактической исполняемой командой, которую вы хотите запустить.

1 голос
/ 20 мая 2010

В Windows / DOS используйте && вместо ;, чтобы объединить несколько команд в одной строке. Вы должны вручную включить заключительную команду, или завершающий && выдаст синтаксическую ошибку. Попробуйте что-то вроде:

NUMBERS = 1 2 3 4
lib:
    $(foreach var,$(NUMBERS),.\a.out $(var) && ) echo.
1 голос
/ 07 января 2010

Мне кажется, что ошибка возникает из-за того, что файл a.out не может быть найден, а не потому, что не найден make-файл.

Также, если имя вашего make-файла - «Makefile», достаточно просто вызвать «make» (без использования опции -f), так как make по умолчанию будет искать файл по именам: GNUmakefile, makefile и Makefile в этом порядке.

0 голосов
/ 07 января 2010

Что вы пытаетесь сделать?

Мне кажется, что простой сценарий будет лучше подходить, чем использовать make.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...