“干净”在生成文件中不起作用

Nay*_*iya 3 c++ makefile

这是我的make文件。

 all: observer

    observer: main.o weather_center.o display.o subject.o observer.o
         g++ main.o weather_center.o display.o subject.o observer.o -o observer

    main.o: main.cpp
        g++ -c main.cpp

    weather_center.o: weather_center.cpp
        g++ -c weather_center.cpp

    display.o: display.cpp
        g++ -c display.cpp

    subject.o: subject.cpp
        g++ -c subject.cpp

    observer.o: observer.cpp
        g++ -c observer.cpp

    clean:
        rm -f  *o observer
Run Code Online (Sandbox Code Playgroud)

在这里,我正在尝试使用

clean:
        rm -f  *o observer
Run Code Online (Sandbox Code Playgroud)

清理临时 *.o 文件。但程序编译并生成目标程序集,但不会删除 *.o 文件。也没有显示任何错误。

  • rm -f *o observer在终端中尝试过。它工作正常。
  • 我已经用于Tab缩进
  • 没有文件以目录开头cleanrm在目录中。
  • 尝试$(RM)代替rm. 但不走运

Nay*_*iya 7

我发现了这个问题。必须指定clean为目标, all否则它不会调用。一般是这样的。

all: [your executive names] clean

在上述情况下

all: observer clean

这是上述案例的完整制作文件

all: observer clean

observer: main.o weather_center.o display.o subject.o observer.o
    g++ main.o weather_center.o display.o subject.o observer.o -o observer

main.o: main.cpp
    g++ -c main.cpp

weather_center.o: weather_center.cpp
    g++ -c weather_center.cpp

display.o: display.cpp
    g++ -c display.cpp

subject.o: subject.cpp
    g++ -c subject.cpp

observer.o: observer.cpp
    g++ -c observer.cpp

clean:
    rm -f  *o observer
Run Code Online (Sandbox Code Playgroud)

  • 这违背了普遍接受的 makefile 约定。这意味着在没有明确目标的情况下调用 `make` 将导致 `observer` 和 `clean` 目标都被重建,这可能不是你想要的。你必须明确地调用 `make observer` 来构建观察者而不调用 `clean` (3认同)