我正在使用Solaris 10,Sun Studio 11.我正在重构一些旧代码,并尝试为它们编写单元测试。我的make文件看起来像:
my_model.o:my_model.cc
CC -c my_model.cc -I/../../include -library=stlport4 -instances=extern
unit_test: unit_test.o my_model.o symbol_dictionary.o
CC -o unit_test unit_test.o my_model.o symbol_dictionary.o -I../../include \
-library=stlport4 -instances=extern
unit_test.o: unit_test.cc
CC -c unit_test.cc -I/../../include -library=stlport4 -instances=extern
symbol_dictionary.o:
cd ../../test-fixtures && ($MAKE) symbol_dictionary.o
mv ../../test-fixtures/symbol_dictionary.o .
在../../test-fixtures makefile中,我有以下目标:
symbol_dictionary.o:
CC -c symbol_dictionary.cc -I/../../include -library=stlport4 -instances=extern
我执行的是instances = extern,因为之前我遇到了链接问题,这是推荐的解决方案。结果是在每个正在编译的目录中,创建了一个SunWS_Cache目录来存储模板实例。
这是解决这个问题的漫长道路。在链接它们之前,将目标文件合并到单个目录中是标准做法吗?
答案 0 :(得分:1)
简短的回答:这是一种常见的做法,通常很方便,并不总是好的,也不总是坏的。
此外,如果您使用自动变量和模式规则,您的makefile可以更短更干净:
COMPILE = CC -I/../../include -library=stlport4 -instances=extern
%.o: %.cc
$(COMPILE) -c $<
unit_test: unit_test.o my_model.o symbol_dictionary.o
$(COMPILE) -o $@ $^
symbol_dictionary.o:
cd ../../test-fixtures && ($MAKE) $@
mv ../../test-fixtures/$@ .
在../../ test:
COMPILE = CC -I/../../include -library=stlport4 -instances=extern
symbol_dictionary.o: %.o : %.cc
$(COMPILE) -c $<