Или: можно ли использовать Qt Creator не для Qt? Если коротко - можно.
Почему он? Потому что оказалось, что он достаточно функционален в мелочах, в частности индексирования кода и автодополнения. Крайне удобен в применении его Locator (что вызывается по стандартному сочетанию клавиш Ctrl+K), применение Локатора вообще сводит использование мыши в Qt Creator к минимуму (что удивительно для среды ориентированной на тулкит Qt4 и создание, в основном, графических приложений). Да, правда обвыкнутся по началу нужно, но потом… Если плагин ( http://gitorious.org/creator-plugins), который добавляет функционал по автоматическому созданию реализации функции/метода по его прототипу, так же Я, до того, как узнал про этот плагин, делал свой патч, со схожим функционалом. В общем, все что нужно для удобной работы с проектом (навигация, дополнения, подсветка синтаксиса, отстройка, отладка и т.п.) здесь есть.
Осталось понять, как это добро использовать. Вопросов нет, когда речь идет о родных средствах, типа .pro файла и qmake, а вот при использовании с не qmake/cmake проектами, можно воспользоваться Generic Project, который используют вашу систему сборки, не вмешиваясь в неё. Подробности всегда можно посмотреть на официальном сайте: http://doc.qt.nokia.com/qtcreator-snapshot/creator-project-generic.html
Собственно по ссылке выше и рассказано все, что нужно знать. Тезисно:
- используется ваша система сборки, порядок шагов по сборке можно задать в свойствах проекта, по умолчанию, это выполнение команды
make all
, соответственно там можно задать любую нужную последовательность, которая соответствует вашей системе сборки. - аналогично задаются шаги по очистке проекта.
- аналогично задается цель для запуска.
- аналогично задаются зависимости между проектами (они должны быть открыты).
- при создании указывается директорий вашего проекта, по умолчанию просканируется дерево и добавятся все *.c, *.cpp, *.cc, *.h, *.hpp файлы (как сказано - все известные типы).
- после создания проекта и сохранения настроек на диске будет создано несколько файлов:
* project_name.files - тут список файлов входящих в проект, обычно исходники, в помощь парсеру, можно править вручную, обновляются автоматически, при добавлении файла в проект из самого Creator’а
* project_name.includes - тут список include директорий, в помощь парсеру, можно править вручную
* project_name.config - заявляется как обычный C файл, в котором можно записывать ваши макроопределения:
#define VERSION "0.0.1"
и т.п. * project_name.creator - собственно сам файл проекта, его открывать в Creator’е для загрузки проекта, сейчас никаких настроек больше не содержит. * в процессе работы появится файл project_name.creator.user в котором будут сохранены ваши параметры сборки, очистки проекта, информация о запускаемых модулях.
Теперь как это можно использовать? Покажу на примере своего небольшого Makefile:
PROJECT_NAME=empty-test
EXE = $(PROJECT_NAME)
CC = gcc
CXX = g++
CFLAGS += -include $(PROJECT_NAME).config
CXXFLAGS += -include $(PROJECT_NAME).config
BIN_DIR = bin
SRC_CPP = ${shell cat $(PROJECT_NAME).files | grep '.cpp$$'}
SRC_C = ${shell cat $(PROJECT_NAME).files | grep '.c$$'}
OBJ := $(SRC_CPP:.cpp=.o)
OBJ += $(SRC_C:.c=.o)
.PHONY : all clean
all: $(OBJ)
$(CXX) -o $(BIN_DIR)/$(EXE) $(LDFLAGS) $(OBJ)
%.o : %.cpp
$(CXX) -c $(LDFLAGS) $(CFLAGS) $(CXXFLAGS) $< -o $@
%.o : %.c
$(CC) -c $(LDFLAGS) $(CFLAGS) $< -o $@
clean:
rm -f $(OBJ) $(BIN_DIR)/$(EXE)
Что тут делается, во первых - автоматически получается список файлов проекта из project_name.files, далее, компилятором автоматически подключается project_name.config, и все объявленные там макросы будут доступны внутри кода.
Естественно тут нет и намека на множественные цели, но проект можно разбивать на подпроекты, их зависимости друг от друга задавать в Creator’е, а самих объединять в рабочие области (workspace). В общем и целом - ограничено все только вашей фантазией, и, по сути, данные действия превращают Qt Creator в продвинутый редактор кода, с базовыми функциями управления проектами, чего часто бывает достаточно.
Да, индексация проекта происходит при его загрузке, что требует времени, поэтому есть лишний повод бить большие проекты на части :)