Существует ли способ указать значения по умолчанию выделения в Visual Studio 2008 так, чтобы файл открылся с участниками, свернутыми по умолчанию?

Как оказалось, невозможно объединить несколько файлов .a в одну библиотеку .a с помощью утилиты ar: она отказывается генерировать индекс. Рабочим решением является распаковать все объектные файлы из всех статических библиотек, а затем упаковать их в объединенную библиотеку.

Ниже приведены инструкции CMake, с которыми я закончил:

set(COMBINED_CORE_LIB_NAME "${CMAKE_STATIC_LIBRARY_PREFIX}DiligentCore${CMAKE_STATIC_LIBRARY_SUFFIX}")

foreach(CORE_LIB ${DILIGENT_CORE_INSTALL_LIBS_LIST})
    list(APPEND CORE_LIB_TARGET_FILES [110]lt;TARGET_FILE:${CORE_LIB}>)
endforeach(CORE_LIB)

if(MSVC)
    add_custom_command(
        OUTPUT ${COMBINED_CORE_LIB_NAME}
        COMMAND ${LIB_EXE} /OUT:${COMBINED_CORE_LIB_NAME} ${CORE_LIB_TARGET_FILES}
        DEPENDS ${DILIGENT_CORE_INSTALL_LIBS_LIST}
        COMMENT "Combining core libraries..."
    )
    add_custom_target(DiligentCore-static ALL DEPENDS ${COMBINED_CORE_LIB_NAME})
else()

    if(PLATFORM_WIN32)
        # do NOT use stock ar on MinGW
        find_program(AR NAMES x86_64-w64-mingw32-gcc-ar)
    else()
        set(AR ${CMAKE_AR})
    endif()

    if(AR)
        add_custom_command(
            OUTPUT ${COMBINED_CORE_LIB_NAME}
            # Delete all object files from current directory
            COMMAND ${CMAKE_COMMAND} -E remove "*${CMAKE_C_OUTPUT_EXTENSION}"
            DEPENDS ${DILIGENT_CORE_INSTALL_LIBS_LIST}
            COMMENT "Combining core libraries..."
        )

        # Unpack all object files from all targets to current directory
        foreach(CORE_LIB_TARGET ${CORE_LIB_TARGET_FILES})
            add_custom_command(
                OUTPUT ${COMBINED_CORE_LIB_NAME}
                COMMAND ${AR} -x ${CORE_LIB_TARGET}
                APPEND
            )
        endforeach()

        # Pack object files to a combined library and delete them
        add_custom_command(
            OUTPUT ${COMBINED_CORE_LIB_NAME}
            COMMAND ${AR} -crs ${COMBINED_CORE_LIB_NAME} "*${CMAKE_C_OUTPUT_EXTENSION}"
            COMMAND ${CMAKE_COMMAND} -E remove "*${CMAKE_C_OUTPUT_EXTENSION}"
            APPEND
        )

        add_custom_target(DiligentCore-static ALL DEPENDS ${COMBINED_CORE_LIB_NAME})
    else()
        message("ar command is not found")
    endif()
endif()

if(TARGET DiligentCore-static)
    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${COMBINED_CORE_LIB_NAME}"
            DESTINATION "${DILIGENT_CORE_INSTALL_DIR}/lib/"
    )
    set_target_properties(DiligentCore-static PROPERTIES
        FOLDER Core
    )
else()
    message("Unable to find librarian tool. Combined DiligentCore static library will not be produced.")
endif()
7
задан Peter Mounce 23 April 2012 в 10:30
поделиться

4 ответа

Да к части 1.

Не уверенный в части 2.

Чтобы иметь VS2008 автоматически открывают файлы в Свернутом состоянии, необходимо будет создать дополнение для выполнения "Редактирования. CollapsetoDefinition", когда каждый документ открывается.

Это не чрезмерно хитро - трудные части, кажется, что необходимо выполнить код несколько миллисекунд после того, как документ на самом деле открыт так, необходимо использовать пул потока, чтобы сделать это.

  1. Создайте Дополнительный проект для VS2008.
  2. Добавьте этот код (см. следующее) в конец Метода OnConnection класса Подключения.

    switch (connectMode)
    {
        case ext_ConnectMode.ext_cm_UISetup:
        case ext_ConnectMode.ext_cm_Startup:
            //Do nothing OnStartup will be called once IDE is initialised.
            break;
        case ext_ConnectMode.ext_cm_AfterStartup:
            //The addin was started post startup so we need to call its initialisation manually
            InitialiseHandlers();
            break;
    }
  1. Добавьте этот метод к классу Подключения

    private void InitialiseHandlers()
    {
        this._openHandler = new OnOpenHandler(_applicationObject);
    }
  1. Добавьте вызов к InitialiseHandlers () к методу OnStartupComplete класса Подключения.

    public void OnStartupComplete(ref Array custom)
    {
        InitialiseHandlers();
    }
  1. Добавьте этот класс к проекту.

    using System;
    using System.Collections.Generic;
    using System.Text;
    using EnvDTE80;
    using EnvDTE;
    using System.Threading;

    namespace Collapser
    {
        internal class OnOpenHandler
        {
            DTE2 _application = null;
            EnvDTE.Events events = null;
            EnvDTE.DocumentEvents docEvents = null;

            internal OnOpenHandler(DTE2 application)
            {
                _application = application;
                events = _application.Events;
                docEvents = events.get_DocumentEvents(null);
                docEvents.DocumentOpened +=new _dispDocumentEvents_DocumentOpenedEventHandler(OnOpenHandler_DocumentOpened);
            }

            void OnOpenHandler_DocumentOpened(EnvDTE.Document document)
            {
                if (_application.Debugger.CurrentMode != dbgDebugMode.dbgBreakMode)
                {
                    ThreadPool.QueueUserWorkItem(new WaitCallback(Collapse));
                }
            }

            private void Collapse(object o)
            {
                System.Threading.Thread.Sleep(150);
                _application.ExecuteCommand("Edit.CollapsetoDefinitions", "");
            }
        }
    }

И теперь все открытые файлы должны быть полностью свернуты.

5
ответ дан 7 December 2019 в 12:26
поделиться

Было бы намного легче использовать Макросы Visual Studio, чтобы сделать то же самое. Редактирование Макро-файла "EnvironmentEvents" в MyMacros и добавление обработчика для DocumentEvents. DocumentOpened с:
DTE.ExecuteCommand ("Редактирование. CollapsetoDefinitions")

0
ответ дан 7 December 2019 в 12:26
поделиться

Быстрый способ свернуть все схемы до определений функций - это нажать: Кнопка контекстного меню * (рядом с правой кнопкой окна) *, L, O

Я использую ее постоянно. Если для этого есть настоящая горячая клавиша, скажите мне:)

0
ответ дан 7 December 2019 в 12:26
поделиться

Я сам пробовал разработать код Visual Basic для макроса, заимствуя из разных мест, и не смог заставить что-либо работать. Так что же я сделал? Я задал вопрос по StackOverflow, конечно! Он получил ответ, я добавил предложенный код в свой макрос EnvironmentEvents , и теперь, когда я открываю файлы CS, примерно через секунду, все мои определения сворачиваются. :)

0
ответ дан 7 December 2019 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: