Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.136.18.48] |
|
Сообщ.
#1
,
|
|
|
В мире не хватает решений для работы с инфраструктурой проектов и solution-ов Visual Studio.
Решил сделать по-нормальному один гибкий фреймворк на Python, позволяющий творить всё-всё с решениями и проектами Visual Studio, что она сама позволяет. Тоесть: - создавать новые сошлюны, - загружать готовые солюшны и проекты - добавлять в них проекты - добавлять и удалять файлы в проектах - поддерживать vs2010, 2012, 2013 ... - полноценно поддерживать Configuration Manager (Platform Manager) - полноценно поддерживать структуру папок в проекте ("виртуальных", они лежат в .vcxproj.filters в vs>=2010) - настраивать все опции, которые есть в окне студии в настройках проекта, и т.д. и т.п. Чтобы в дальнейшем можно было любую утилиту из разряда "генератор solution-а из двух проектов DLL+EXE" не писать отдельно, а просто выразить парой-тройкой строчек на питоне. Чтобы можно было, к примеру, из командной строки перенастроить опции компилятора для всего решения или создать новую конфигурацию-платформу с новым Post-Build Event-ом. Склеить несколько проектов... Скопировать и переименовать старые. Раньше у меня то и дело появлялся генератор новых проектов на PHP, который потом терялся, потому что был собран на коленке и воспринимался как кривой temp-файл:) Он работал по принципу копирования заранее подготовленного шаблонного проекта с переименованием его в другое имя. Надоело ещё то, что надо было держать кучу этих шаблонных проектов. CMake мне тоже не нравится - у него отсутствует много возможностей настройки проекта, которые есть в студии. Возможно, когда-нибудь это станет либой, на которой будет работать какой-нибудь ещё один очередной CMake 2.0 Примеры кода: # создание проекта def test_vs2010_project_save(): proj = vs2010_project('my_project', project_type.EXECUTABLE, character_set.WIDECHAR) # создаем проект, win32 exe, wide char # добавляет в проект стандартный пустой скелет Source Files, Header Files, Resource Files proj.init_fs_with_sample_files() file_data = proj.save() # сохраняем файл (получаем содержимое) # загрузка проекта def test_vs2010_project_load(): raw = file('sample_vs2010_project1.vcxproj', 'r').read() # загружаем проект без .filters-файла proj = vs2010_project.load(raw) # загружаем .filters-файл raw_filters = file(test_file_path(vcxproj+'.filters'), 'r').read() # применяем его к виртуальной файловой с-ме (студия использует фильтры, чтобы показывать директории) proj.fs = proj.load_filters(raw_filters) # выводим структуру проекта в консоль (примитивная ASCII-геометрия) proj.fs.print_fs() Результат: Или вот ещё пример с добавлением файлов. Так работает vfs.init_fs_with_sample_files: def init_fs_with_sample_files(self, source_dir=".\\"): # # Make the default Header Files, Source Files, Resource Files filters # self.init_fs() # # Add the Core filter to Source and Header # self.add_filter("Header Files\\Core", "") self.add_filter("Source Files\\Core", "") self.add_filter("Header Files\\Core\\Injector", "") self.add_filter("Source Files\\Core\\Injector", "") # # Add core.h and core.c, disasm.c and disasm.h to \Core ... # self.add_header_file(os.path.join(source_dir, "core.h"), "Header Files\\Core") self.add_source_file(os.path.join(source_dir, "core.c"), "Source Files\\Core") self.add_header_file(os.path.join(source_dir, "disasm.h"), "Header Files\\Core") self.add_source_file(os.path.join(source_dir, "disasm.c"), "Source Files\\Core") # self.add_header_file(os.path.join(source_dir, "inject.h"), "Header Files\\Core\\Injector") self.add_source_file(os.path.join(source_dir, "inject.c"), "Source Files\\Core\\Injector") self.add_header_file(os.path.join(source_dir, "process.h"), "Header Files\\Core\\Injector") self.add_source_file(os.path.join(source_dir, "process.c"), "Source Files\\Core\\Injector") self.add_header_file(os.path.join(source_dir, "x86.h"), "Header Files\\Core\\Injector") self.add_source_file(os.path.join(source_dir, "x86.c"), "Source Files\\Core\\Injector") self.add_header_file(os.path.join(source_dir, "jump.h"), "Header Files\\Core\\Injector") self.add_source_file(os.path.join(source_dir, "jump.c"), "Source Files\\Core\\Injector") # # Add tools.h and tools.c to \Core using add_file() # Note: # add_file detects the group (compile/include/none) automatically by extension # self.add_file(os.path.join(source_dir, "tools.h"), "Header Files\\Core") self.add_file(os.path.join(source_dir, "tools.c"), "Source Files\\Core") # # Add handler.h and handler.c files to the root of Source Files and Header files # self.add_file(os.path.join(source_dir, "handler.h")) self.add_file(os.path.join(source_dir, "handler.c")) # # Add main.c to the root # self.add_file(os.path.join(source_dir, "main.c"), "\\") Уже готово где-то на 50%. Ещё какой-то скрин: http://s9.postimg.org/nmgkvwzvz/pyvs1.png Добавлено Так вот, собсно, у кого какие идеи? Помимо того, что я описал в качестве базового функционала. Ну и вообще, что скажете? Интересно мнение толпы и людей в частности. |
Сообщ.
#2
,
|
|
|
Если очень хочется писать на Питоне, а нужно собирать проекты под винды, то можно поглядеть в строноу SCons: http://www.scons.org/
|
Сообщ.
#3
,
|
|
|
Мяут-Настоящий
Это ты так оценил? Моя программа в сто раз круче будет, вообще-то |