每个模块都使用自己的测试独立测试_ $(MODULE).c。 已生成包含无覆盖模块的$(LIBRARY)共享库。 $(basename $<)。o应该覆盖$(LIBRARY)中的那个。出于某种原因,我得到的结果好像没有被覆盖。有人可以审查这个并提出修复建议吗?目前,我对五个对象中的每一个都有非通用的gcov规则。这些gcov正常工作。下面我将展示通用规则和规则的一个特定用途。
SHARED_OPTS=-O0 -Wall -Wextra -fPIC
GOPTS=$(SHARED_OPTS) -g -coverage -pg
%.gcov : %
@echo "\t$@ generic (needs work)"
@-gcc $(GOPTS) -c -o test_$(basename $<).o test_$<
@-gcc $(GOPTS) -c -o $(basename $<).o $<
@-gcc $(GOPTS) -o gcov_test_$(basename $<) \
test_$(basename $<).o \
$(basename $<).o \
-L . -l $(LIBRARY)
@-./gcov_test_$(basename $<)
@-gcov $< >$@.out 2>&1
@echo "no Mac gprof: -gprof gcov_test_$(basename $<) gmon.out > $<.prof"
@$(call timestamp,$@)
Unicode.c.gcov: Unicode.c
如果有人有兴趣通过开发共享库来合作开发高效率的高质量Unicode lexing /解析支持,我很乐意有评论者或贡献者。
上面显示的Makefile片段位于github存储库中:
https://github.com/jlettvin/Unicode特别是在c子目录下。
答案 0 :(得分:1)
当您尝试在makefile中发现问题时,应该避免使用@
,因为它隐藏了命令行,因此您无法查看问题。此外,你应该避免-
:如果这些命令中的任何一个失败,你肯定不想继续运行其余的配方,我不会期望。
我不知道它是否是剪切/粘贴问题,但我必须假设这些行至少是错误的:
@-gcc $(GOPTS) -c -o test_$(basename $<).o test_$<
@-gcc $(GOPTS) -c -o $(basename $<).o $<
据我所知,你的makefile中,这些行的最后几个字分别应该是test_$<.c
和$<.c
。