2013-03-10 2 views
1

[короткая версия] Я не могу иметь два исходных файла с тем же именем в тестируемом модулем проекта C++, даже если они находятся в разных папках. g ++ и make являются грубыми друг с другом. (Или, может быть, я глуп)(make/g ++) включают полный путь для автоматически генерируемых целей зависимостей? (или обходной путь)

[длинная версия] У меня возникла проблема с моей установкой make/g ++/gtest. Когда г ++ автоматически генерирует зависимости, он создает что-то вроде этого:

event_handler.o: src/os/event_handler.h src/os/event.h 

Но мне нужно что-то вроде этого (полный путь к цели):

src/os/event_handler.o: src/os/event_handler.h src/os/event.h 

Причина заключается в том, когда у меня есть файл, как это :

src/os/event_handler.cpp // contains EventHandler class 

у меня есть компаньон-файл, как это:

test/src/os/event_handler.cpp // contains EventHandlerTest unit test class 

... так что их файлы .o также отображаются как event_handler.o в автогенерированном списке зависимостей. Есть ли способ, чтобы заставить г ++, чтобы дать полный путь или мне нужно изменить имена моих тестовых файлов на что-то вроде:

test/src/os/event_handler_test.cpp 

Я не смог найти что-либо в Интернете или в документации.

+1

Я бы посоветовал использовать имена типа 'event_handler_test.cpp' и, возможно,' event_stub.cpp', но вы также можете использовать полные пути; можете ли вы показать нам свой файл? – Beta

ответ

2

Существует два решения.

  1. Используйте -MMD для компиляции и создания зависимостей за один шаг, которые будут генерировать файлы .d, соответствующие объектным файлам.
  2. Используйте -MT или -MQ, чтобы указать путь к объекту при создании необходимых компонентов.

Лично я предпочитаю решения MMD, так как он также лучше работает с багги-файлами заголовков. См. http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html

+0

Ах! Это то, что я искал. -MMD отлично; Благодаря!!!! – Bevan

Смежные вопросы