Использование Eclipse CDT из командной строки - PullRequest
1 голос
/ 11 ноября 2011

Мне нужно переименовать некоторые из моих классов, функций и пространств имен C ++ как часть моего сценария сборки, который выполняется моей системой CI.

К сожалению, простой техники sad / awk / gsar / ... недостаточно, и мне нужен умный рефакторинг переименования, который тщательно анализирует мой код.

На самом деле я обнаружил, что рефакторинг CDT C / C ++ с переименованием делает то, что мне нужно. Но он делает это из Eclipse IDE. Поэтому мне нужно найти способ запустить его из командной строки и сделать его частью моего скрипта сборки CI.

Я знаю, что в Eclipse есть исполняемый файл eclipsec, который позволяет запускать некоторые функции Eclipse из командной строки ( см., Например, здесь ).

Но я не могу найти подходящую документацию для функций, экспортирует CDT в командную строку. Единственное, что я нашел, это это . Но это не решает мою проблему.

Итак, мне нужна помощь для запуска рефакторинга переименования CDT из командной строки (или как-то так). Если это невозможно, может быть, кто-то посоветует другой инструмент, который может переименовать рефакторинг для C ++ из командной строки?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

Прагматический подход

«Мне нужно переименовать как часть моего сценария сборки»

Это немного похоже на проблему дизайна. Однако я помню, что был виновен в том же грехе, когда писал приложение на C ++ для AIX / Win32: прежде всего я хотел иметь возможность связывать «конфликтующие» версии общих объектов. Я решил это, используя простой взлом препроцессора, такой как:

# makefile

#if($(ALTERNATIVE))
    CPPFLAGS+=-DLIBNAMESPACE=MYLIB_ALTERNATIVE
#else
    CPPFLAGS+=-DLIBNAMESPACE=MYLIB
#endif

./obj64/%.o: %cpp
     xlC++ $(CPPFLAGS) $^ -o %@

Пример исходного / заголовочного файла:

namespace MYLIB
{
     class LibService :
     {
     };
}

Как видите, для этого требуется всего один

find -iname '*.[hc]pp' -o -iname '*.[hc]' -print0 |
     xargs -0 sed -i 's/OldNamespace/MYLIB/g'

Eclipse Automation

Вы могли бы взглянуть на eclim , который выполняет большинство, если не все, того, что вы описываете, однако он нацелен на редактор vim.

Что может похвастаться eclim - это полная интеграция затмений (завершение, рефакторинг, поиск использования и т. Д.) Из внешней программы. Я не совсем в курсе бэкэнда eclim, но я знаю, что он работает с серверным процессом eclimd , который предоставляет сервисный интерфейс, используемый плагином vim.

Я подозреваю, что вы сможете повторно использовать код из eclimd, если не просто использовать eclim для своих целей.

0 голосов
/ 11 ноября 2011

Мы заканчиваем инструмент переименования командной строки для C ++, который использует точный анализ компилятора и разрешение имен, включая обработку теневых имен. Свяжитесь со мной (см. Био) для получения более подробной информации или если вы можете быть заинтересованы в бета-версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...