Makefile очистить, не удаляя файлы * .o? - PullRequest
5 голосов
/ 27 декабря 2010

Интересно, почему это не удалит / очистит * .o файлы, сгенерированные при запуске make?

# UNIX Makefile

CXX = g++
LD  = g++
CXXFLAGS = -g

testlfunction: lfunction.o lfunctionlist.o lprocessor.o testlfunction.o
    $(LD) -o $@ $^

clean:
    rm *.o testlfunction

, прежде чем он будет

$(RM) *.o testlfunction

, но это неработать также; (

Почему это?

Ответы [ 2 ]

6 голосов
/ 27 декабря 2010

Один из способов, которым make clean может «не выполнить» что-либо, - это если в вашем каталоге есть файл с именем clean, возможно, результат запуска make -t clean.Это создаст файл, поэтому при следующем запуске make clean он будет отображаться в актуальном состоянии - у него нет зависимостей, поэтому нет никаких причин для запуска действия.

Если вы используете GNU Make, убедитесь, чточто у вас есть строка:

.PHONY: clean

Это остановит make -t от создания clean и обеспечит выполнение действий.

5 голосов
/ 27 декабря 2010

Чтобы проверить, что на самом деле происходит, запустите «make clean» и проверьте вывод этой команды.

  1. Это ничего? Тогда в текущем каталоге может быть файл с именем «clean». Удалите его и попробуйте снова.
  2. Это начинается с "rm ..."? Тогда это кажется нормальным.
  3. Во всех остальных случаях сообщите нам точный результат, который вы получите.

Чтобы проверить, действительно ли команды выполняются, вставьте несколько команд "echo" до и после команды "rm". Они казнены?

И, наконец, вы различали символы табуляции и пробелы? В Makefiles разница важна. Команды должны иметь отступ с помощью табуляции.

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