Команда rm -f в моем Makefile не работает - PullRequest
0 голосов
/ 20 мая 2019

Ссылаясь на код ниже, команда rm -f *.o не удаляет файлы realnumsets.o и gestore.o после процесса компиляции. Есть ли у вас какие-либо предложения, как я могу удалить эти *.o файлы?

~/workspace$ more Makefile
eseguibile : gestore.o realnumsets.o Makefile
        gcc -ansi -Wall -O gestore.o realnumsets.o -o myprog

gestore.o : gestore.c realnumsets.h Makefile
        gcc -ansi -Wall -O -c gestore.c

realnumsets.o : realnumsets.c realnumsets.h Makefile
        gcc -ansi -Wall -O -c realnumsets.c

clean :
        rm -f *.o
~/workspace$ make 
gcc -ansi -Wall -O -c gestore.c
gcc -ansi -Wall -O -c realnumsets.c
gcc -ansi -Wall -O gestore.o realnumsets.o -o myprog
~/workspace$ ls -la
total 60
drwx------ 2 ubuntu ubuntu  4096 May 20 17:57 ./
drwxrwxr-x 9 ubuntu ubuntu  4096 May 20 14:33 ../
-rw------- 1 ubuntu ubuntu   289 May 20 16:35 Makefile
-rw------- 1 ubuntu ubuntu  6271 May 20 14:45 gestore.c
-rw------- 1 ubuntu ubuntu  4624 May 20 17:57 gestore.o
-rwx------ 1 ubuntu ubuntu 13588 May 20 17:57 myprog*
-rw------- 1 ubuntu ubuntu  5101 May 20 14:44 realnumsets.c
-rw------- 1 ubuntu ubuntu   584 May 20 14:08 realnumsets.h
-rw------- 1 ubuntu ubuntu  3792 May 20 17:57 realnumsets.o

Ожидаемые результаты:

~/workspace$ ls 
Makefile  gestore.c  myprog*  realnumsets.c  realnumsets.h 

Фактический результат:

~/workspace$ ls 
Makefile  gestore.c  gestore.o  myprog*  realnumsets.c  realnumsets.h  realnumsets.o

Ответы [ 2 ]

6 голосов
/ 20 мая 2019

Вы должны запустить make clean, чтобы запустить чистую цель.Ввод просто make запускает только цель по умолчанию (eseguibile) и ее зависимости.

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

Утилита make работает при достижении определенной цели. Если вы укажете цель, это будет тем, к чему стремятся. По умолчанию первая цель (не начинающаяся с точки) будет создана, если вы не укажете цель. Таким образом, ваш простой вызов с

make

начнет работу с целевым eseguibile. Сделайте тяги в целях gestore.o и realnumsets.o, так как они необходимы для создания eseguibile. Чистая цель не нужна для eseguibile, поэтому она не запускается.

Теоретически, вы можете добавить свою чистую цель в конец списка целей в eseguibile. Тем не менее, это было бы необычным способом ведения дел. Чаще всего вы просто звоните отдельно:

make clean

после запуска make для сборки. Если вы хотите выполнить очистку перед сборкой, вы можете выполнить это с помощью:

make clean eseguibile

Сначала будет произведена очистка, поэтому вы начнете создавать новые .o файлы.

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