在无具有特定生成文件名的目标中生成干净的结果
make clean results in no target with specific makefile name
我在同一项目目录下有很多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
,这将执行清理,但我想是单命令,我的意思是,不必按两次回车键。
相关答案:
- "使目标干净"
- 结果为"没有使目标'干净'的规则"
- gcc 生成文件错误:"没有规则来设定目标..."
想法:
makefile 实际上用于我有一个 C 项目,我只是做了一些更改以适应C++,也许这就是问题所在。
我认为你需要打电话给make -f Makefile_prune clean
.
调用make clean
时,由于您没有使用 -f 选项,因此它不会调用Makefile_prune。它调用名为"Makefile"的其他文件,该文件可能没有clean
目标。
另参考: https://www.gnu.org/software/make/manual/html_node/Makefile-Names.html
如果没有必要,请不要从makefile
内部调用make
。在这种情况下,您绝对不会:
all: $(OUT) clean
clean : $(OUT)
rm -f $(OBJS)
$(OUT) : $(OBJS)
$(CC) $(OBJS) -o $(OUT)
这肯定会更快,因为您不必掏钱。此外,如果您再次运行make
,则不必重新生成rkd
。虽然,如果你想每次都重建它,用一些 PHONY 规则替换$(OUT)
(例如 clean : build
和build : $(OBJS)
)
此外,应PHONY
clean
和count
:
.PHONY : all clean count
最后,有一件事值得指出。您不必手动删除*.o
文件。 make
应该为您删除它们。请参阅链式规则。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 用C++20 fmt限制结果的总大小
- 如何返回一个类的两个对象相加的结果
- C++A*算法并不总是在路径中具有目标节点
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 序列化,没有库的整数,得到奇怪的结果
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 为测试目标创建具有不同源文件夹的文件
- 在更改for循环的第三部分后,未使用for循环结果
- 使用++运算符会导致意外的结果
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- C++Brute Force攻击函数不会返回结果
- 使用源向量作为目标
- 当应该删除其目标时,为什么此智能指针给出正确的结果
- 在无具有特定生成文件名的目标中生成干净的结果