【发布时间】:2012-09-24 00:01:08
【问题描述】:
我正在使用这个预制的 makefile。我尝试为我添加到应用程序的这两个文件添加heavyhitter.o 和heavyhitter.h,但我无法让它工作。我已经毫无问题地添加了 metadata_record.h 和 metadata_record.o,并且由于我正在添加到同一个区域,我不确定为什么它以前有效但现在无效。
CC = $(shell if test -f /opt/local/bin/gcc-mp-4.7; 然后\ 回声 gcc-mp-4.7;否则回声 gcc;菲) CFLAGS = -std=gnu99 -g -W -Wall -O0 -gstabs -Iglib-2.0 -lglib-2.0 TESTS = $(patsubst %.c,%,$(sort $(wildcard test[0-9][0-9][0-9].c))) %.o: %.c m61.h memory.h metadata_record.h heavyhitters.h $(CC) $(CFLAGS) -o $@ -c $ 全部:$(TESTS) hhtest @echo "*** 运行 'make check' 或 'make check-all' 来检查你的工作。" test%: test%.o m61.o memory.o metadata_record.o heavyhitters.o $(CC) $(CFLAGS) -o $@ $^ test017:test017-help.o hhtest: hhtest.o m61.o memory.o metadata_record.o heavyhitters.o $(CC) $(CFLAGS) -o $@ $^ -lm 检查: $(TESTS) $(patsubst %,check-%,$(TESTS)) @echo "*** 所有测试都成功了!" 检查所有:$(测试) @x=真;对于我在 $(TESTS);做 $(MAKE) 检查-$$i || x=假;完毕; \ 如果 $$x;然后 echo "*** 所有测试成功!";菲; $$x 检查测试%:测试% @test -d 输出 || mkdir 输出 @rm -f out/test$*.fail @-sh -c "./$^ > out/test$*.output 2>&1" >/dev/null 2>&1;真的 @perl compare.pl out/test$*.output test$*.c test$* 干净的: rm -f $(TESTS) hhtest *.o rm -rf 输出 MALLOC_CHECK_=0 导出 MALLOC_CHECK_ .珍贵:%.o .PHONY:所有干净检查检查-%准备检查【问题讨论】:
-
使用
remake并运行remake -x甚至remake -x -d来调试Makefile -
在什么情况下不工作?
-
我得到“make: *** No rule to make target
heavyhitters.o', needed bytest001'。停止。”我的系统上没有 remake 命令。 -
您添加的文件是否与其他来源位于同一文件夹中?如果没有,您可能需要调整 make 的 sources 选项以找到它们,或者通过相对或绝对路径指定它们(请不要使用后者)。
-
它们在同一个目录中