На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> PyVS: Read/Write VS projects and solutions , Python. In progress. Оцените идею
    В мире не хватает решений для работы с инфраструктурой проектов и 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 :)

    Примеры кода:

    ExpandedWrap disabled
      # создание проекта
      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()


    Результат:

    user posted image

    Или вот ещё пример с добавлением файлов. Так работает vfs.init_fs_with_sample_files:

    ExpandedWrap disabled
        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
    :)

    Добавлено
    Так вот, собсно, у кого какие идеи? :) Помимо того, что я описал в качестве базового функционала. Ну и вообще, что скажете? Интересно мнение толпы
    и людей в частности.
    Сообщение отредактировано: reinterpret_alexey -
      Если очень хочется писать на Питоне, а нужно собирать проекты под винды, то можно поглядеть в строноу SCons: http://www.scons.org/
        Мяут-Настоящий

        Это ты так оценил? Моя программа в сто раз круче будет, вообще-то :D
        Сообщение отредактировано: reinterpret_alexey -
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0256 ]   [ 15 queries used ]   [ Generated: 28.04.24, 04:46 GMT ]