Существует ли автоматизированный способ объединения файлов реализации C ++ (.cpp) и заголовочных файлов (.h) - PullRequest
2 голосов
/ 17 февраля 2010

Я пытаюсь создать каркас модульного тестирования, используя CPPUnit для большой базы кода. Мне нужно иметь возможность тестировать отдельные модули, которые являются частью дерева модулей, которое начинается с определенного корневого модуля.

По нетехнической причине я не могу коснуться рабочего файла (мой первоначальный подход заключался в добавлении ifdef в корневой модуль). Поэтому я подумал о другом подходе, который заключается в создании копий заголовков корневых модулей, а также копий заголовков, принадлежащих модулям в иерархии промежуточного наследования. Из-за количества задействованных модулей, а также размера источника каждого модуля. Я ищу способ автоматически сделать это для меня.

Так что для foo.h и foo.cpp я ищу какой-то инструмент, который будет выводить fooTest.h, где fooTest.h содержит объявление И определение всего, что находится foo.cpp / foo.h

РЕДАКТИРОВАТЬ: Спасибо за ответы, я забыл упомянуть, что содержимое fooTest.h не должно быть результатом объединения foo.cpp и foo.h. Мне нужно внести небольшие изменения в корневой файл fooTest.h, чтобы сделать его подходящим для тестирования. Таким образом, простое использование включений не будет работать. Я посмотрю на объединение файлов и посмотрим, решит ли это мою проблему.

Ответы [ 5 ]

5 голосов
/ 17 февраля 2010
gcc -E

запускает только препроцессор:

  -E  Stop after the preprocessing stage; do not run the compiler proper.
      The output is in the form of preprocessed source code, which is
      sent to the standard output.

Это приведет к вставке всех директив #include. Однако он также будет захватывать стандартные библиотеки - но их не должно быть вредно включать несколько раз.

1 голос
/ 17 февраля 2010

Напишите простой инструмент, который обрабатывает только директивы #include "". Обратите внимание: он должен , а не обрабатывать директивы "#include <>" и не затрагивать никакие другие директивы препроцессора, с которыми вы сталкиваетесь.

Вы захотите поддерживать -I аргументы аналогично gcc (или сделать что-то эквивалентное для вашего компилятора, если он работает в другой среде). Должна быть дневной работой и сделать хороший проект с открытым исходным кодом (оставьте указатель, если вы это сделаете).

Это приведет к перетаскиванию всего дерева «нестандартных» заголовков, используемых каждым исходным файлом, над которым вы работаете, но это должно быть безвредным.

0 голосов
/ 29 ноября 2010

В Visual C ++ вы можете использовать / P [/ EP]

См. Ссылку: http://msdn.microsoft.com/en-us/library/8z9z0bx6%28v=VS.71%29.aspx

0 голосов
/ 17 февраля 2010

Под * nix вы можете просто использовать cat.

cat foo.h foo.cpp > fooTest.h
0 голосов
/ 17 февраля 2010

Это не вопрос C ++ - вы спрашиваете, как манипулировать файлами в каком-то сценарии. Немедленный ответ, который приходит на ум:

cat foo.h foo.cpp > fooTest.h
...