使用特定的makefile名称使没有目标的清理结果

时间:2014-12-15 00:03:41

标签: c++ gcc makefile g++

我在同一个项目目录下有很多makefile。

Makefile_prune:

OBJS    = main.o
SOURCE  = main.cpp
HEADER  =   Division_Euclidean_space.h  Find_diameter.h Find_k_max.h    Householder.h   IO.h    Mean_variance.h Point.h Random_generator.h  Random_kd_forest.h  Tree.h
OUT     =   rkd
CC  = g++
FLAGS   =   -std=c++0x  -O3 -c  -Wall
# -c flag generates object code for separate files

all: $(OBJS)
    $(CC)   $(OBJS) -o $(OUT)
    make clean

# create/compile the individual files >>separately<< 
main.o: main.cpp
    $(CC) $(FLAGS) main.cpp

.PHONY : all
# clean house
clean:
    rm -f $(OBJS)

# do a bit of accounting
count:
    wc $(SOURCE) $(HEADER)

我收到了干净的错误,如下所示:

samaras@samaras-A15:~/code$ make -f Makefile_prune 
g++ -std=c++0x  -O3 -c  -Wall main.cpp
g++ main.o -o rkd
make clean
make[1]: Entering directory `/home/samaras/paper/rkd_forest/code'
make[1]: *** No rule to make target `clean'.  Stop.
make[1]: Leaving directory `/home/samaras/paper/rkd_forest/code'
make: *** [all] Error 2

然后我可以运行make -f Makefile_prune clean,这将执行清理工作,但我想要单一命令,我的意思是,不必按两次输入。

相关答案:

  1. “make clean” results in “No rule to make target `clean'”
  2. gcc makefile error: “No rule to make target …”

  3. 点子:

    makefile实际上用于我的C项目,我只是做了一些修改以适应C ++,也许这就是问题。

2 个答案:

答案 0 :(得分:1)

我认为您需要致电make -f Makefile_prune clean

当你没有使用-f选项时调用make clean时,它不会调用Makefile_prune。它调用了一些名为&#39; Makefile&#39;的其他文件。可能没有clean目标。

另请参考:https://www.gnu.org/software/make/manual/html_node/Makefile-Names.html

答案 1 :(得分:1)

如果您不必,请不要在make内拨打makefile。在这种情况下,你绝对不会:

all: $(OUT) clean

clean : $(OUT)
    rm -f $(OBJS)

$(OUT) : $(OBJS) 
    $(CC) $(OBJS) -o $(OUT)

这肯定会更快,因为你不必掏空。此外,如果再次运行rkd,则无法重建make。虽然,如果您想每次都重建它,请将$(OUT)替换为一些PHONY规则(例如clean : buildbuild : $(OBJS)

此外,cleancount应为PHONY

.PHONY : all clean count

最后,有一点值得指出。您没有 手动删除*.o个文件。 make应该为您删除它们。见Chained Rules