Консолидация файлов в одном каталоге перед тем, как связать их в конечный исполняемый файл - PullRequest
0 голосов
/ 04 мая 2010

Я работаю над 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 .

В make-файле ../../test-fixtures у меня есть следующая цель:

symbol_dictionary.o:
    CC -c symbol_dictionary.cc -I/../../include -library=stlport4 -instances=extern

Я делаю instances = extern, потому что раньше у меня были проблемы с компоновкой, и это было рекомендуемое решение. В результате для каждого компилируемого каталога создается каталог SunWS_Cache для хранения экземпляров шаблона.

Это долгий путь к этому вопросу. Является ли общепринятой практикой объединение объектных файлов в одном каталоге перед их связыванием?

1 Ответ

1 голос
/ 05 мая 2010

Краткий ответ: это обычная практика, часто удобная, не всегда хорошая, не всегда плохая.

Кроме того, ваши make-файлы могут быть короче и чище, если вы используете автоматические переменные и правила шаблонов:

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/$@ .

in ../../test:

COMPILE = CC -I/../../include -library=stlport4 -instances=extern

symbol_dictionary.o: %.o : %.cc
    $(COMPILE) -c $<
...