在将文件链接到最终可执行文件之前合并单个目录中的文件

时间:2010-05-04 19:33:14

标签: makefile compilation

我正在使用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目录来存储模板实例。

这是解决这个问题的漫长道路。在链接它们之前,将目标文件合并到单个目录中是标准做法吗?

1 个答案:

答案 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 $<