makefiles - чистый как цель - PullRequest
1 голос
/ 23 июня 2011

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

jamm : hello.o ghola.o
    gcc $^ -o $@

%.o : %.c
    gcc -c S<

clean :  
    rm *.c

У меня есть несколько вопросов. Как очистить все эти c-файлы, используя команду clean as target. мы даем команду make -f file1 (скажем, имя_файла file1), и она видит цель как jamm и выполняет, но она не выполняет чистую цель. Если в командной строке я говорю make clean, она говорит, что нет такого файла или каталога, я если кто-то не может понять эту концепцию, может кто-нибудь сказать мне, как выполнить их, когда я написал в файле make.please guyss

Ответы [ 2 ]

3 голосов
/ 23 июня 2011

Проверьте в своем каталоге, есть ли у вас файл с именем " clean ". Возможно, ваш make вызов считает, что он должен сгенерировать"чистый" файл каким-то образом.

Чтобы это исправить, попробуйте добавить перед чистой целью индикатор .PHONY :

jamm : hello.o ghola.o
    gcc $^ -o $@

%.o : %.c
    gcc -c S<

# add this:
.PHONY: clean

clean :  
    rm *.c

ПУТЬ: ВАША ЧИСТАЯ ЦЕЛЬ СМОЖЕТ ПЛОХО: разве вы не должны удалять файлы .o вместо .c ????

1 голос
/ 23 июня 2011

В одном из моих make-файлов цель clean выглядит следующим образом:

.PHONY: depend clean all new

clean:
    rm *.o *~ $(PROGS) ~/include/*.gch

Обратите внимание, что строка с исполняемым оператором начинается с табуляции.

Некоторые другие вещи:

  1. Возможно, вы не хотите rm ваши .c файлы.Это ваши исходные файлы, и вы можете потерять всю свою работу, кодируя их.
  2. То, что вы действительно хотите удалить, это ваш объект (.o в моем примере) и исполняемый файл ($(PROGS) в моем примере, действительнолюбая переменная, которая содержит имена исполняемых файлов) и предварительно скомпилированные заголовки (.gch), так что вы можете переделать их с чистого листа.
  3. Цели, которые на самом деле не создают файл с таким именем, напримерclean, должны быть указаны как обязательные для .PHONY.Это позволяет понять, что даже если существует файл с именем clean, он все равно должен выполнить команду.
  4. Чтобы выполнить конкретную цель (например, clean), просто введите

    make clean
    

    но убедитесь, что:

    • Вы находитесь в том же каталоге, что и ваш make-файл
    • Ваш make-файл должен иметь имя Makefile или makefile.Если вы используете GNU make, вы также можете назвать его GNUmakefile
...