我在同一个项目目录下有很多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
,这将执行清理工作,但我想要单一命令,我的意思是,不必按两次输入。
相关答案:
点子:
makefile实际上用于我的C项目,我只是做了一些修改以适应C ++,也许这就是问题。
答案 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 : build
和build : $(OBJS)
)
此外,clean
和count
应为PHONY
:
.PHONY : all clean count
最后,有一点值得指出。您没有 手动删除*.o
个文件。 make
应该为您删除它们。见Chained Rules。