удаление * .o в makefile не очищает файлы - PullRequest
1 голос
/ 03 ноября 2011

В makefile clean я написал как rm -rf *.o. Но это не чистка файлов. Если я дал rm -rf libdummy.o, то это правильно его почистил. Так что, если я использую *, он не работает, как ожидалось.

clean:
    rm -rf *.o
    rm -rf dummy.a

и вывод


    [exec] rm -rf *.o
    [exec] rm -rf dummy.a

Если в папке есть a.o, b.o и dummy.a. После того, как make clean, a.o и b.o появятся в этой папке itsefl, dummy.a будет удалено.

Примечание: я выполняю эту сборку в windows, собирая для vxworks пакет tornado 2.2. Все команды, как make, cd, cp, rm из моего make-файла, выполняются из пакета торнадо. Нет имени файла с именем clean. Более того, я объявил clean тегом PHONY.

Ниже обсуждение отличается от моей проблемы.

Очистить Makefile, не удаляя файлы * .o?

Ответы [ 2 ]

4 голосов
/ 04 ноября 2011

В среде Unix расширение подстановочных знаков, таких как *.o, обрабатывается оболочкой перед вызовом других программ, таких как rm. Если я правильно помню, Tornado не включает оболочку в стиле Unix. Я подозреваю, что его make вместо этого использует cmd.exe для вызова команд. cmd.exe не выполняет подстановочные знаки как оболочка Unix Он просто передал бы *.o в rm, который бы молча проигнорировал его, из-за опции -f.

Если это является причиной проблемы, вы можете либо использовать команду Windows del, которая выполняет собственное расширение с подстановочными знаками, либо вы можете позволить make сделать расширение с подстановочными знаками для вас, написав rm -rf $(wildcard *.o).

1 голос
/ 02 февраля 2013

Обязательно включите в ваш make-файл следующее после объявления объектов: все: [ваши имена] чисто

** только что решил мою проблему с make-файлом, так как clean должен быть явно объявлен.

...