Хорошие методы для использования Make-файлов в VisualStudio?

Более эффективный подход заключается в создании условия, которое отображает элементы в label_order на индексы, так что вы можете использовать индексы в качестве ключей при выполнении сортировки:

keys = {n: i for i, n in enumerate(label_order)}
sorted(data, key=lambda d: (-keys[d['label']], d['date']), reverse=True)

Это возвращает: [114 ]

[{'label': 3, 'data': 1, 'date': datetime(2018, 12, 31)},
 {'label': 3, 'data': 2, 'date': datetime(2017, 12, 31)},
 {'label': 4, 'data': 3, 'date': datetime(2018, 12, 31)},
 {'label': 4, 'data': 4, 'date': datetime(2018, 12, 25)},
 {'label': 1, 'data': 5, 'date': datetime(2018, 12, 31)}]
5
задан Robert Gould 27 February 2009 в 07:56
поделиться

11 ответов

Мы используем сценарий NAnt, который на шаге компиляции называет MSBuild. Используя NAnt позволяет нам выполнять и пред - и задачи постсборки, такие как установка номеров версий для соответствия числам пересмотра управления исходным кодом, сопоставление информации о покрытии кода, сборка и архивирование источников развертывания. Но тем не менее, в основе его, он - MSBuild, это на самом деле делает компиляцию.

Можно интегрировать сборку NAnt как инструмент пользователя в IDE, так, чтобы он мог использоваться и на сборке или непрерывном сервере интеграции и разработчиками таким же образом.

2
ответ дан 18 December 2019 в 07:57
поделиться

Смотрите на MSBuild!

  • MSBuild может работать с sln/csproj файлами из VS, таким образом, для простых проектов можно просто назвать их непосредственно.
  • если Вы нуждаетесь в большем количестве управления, переносите проекты в Ваш собственный процесс сборки, добавьте свои собственные задачи и т.д. - это очень расширяемо!

(Я хотел добавить образец, но этот edior полностью испортил XML... извините),

5
ответ дан 18 December 2019 в 07:57
поделиться

Идеально, возможно, на практике нет.

Make-файлы были бы моим предпочтением как ведущим устройством сборки, однако, разработчики проводят все свое время в Visual Studio IDE и когда они вносят изменение, это в vcproj файл, не make-файл. Таким образом, если я делаю глобальные сборки с make-файлами, это слишком легко выведено из синхронизации с файлами проекта/решения в игре 8 или 10 другими.

Единственным путем я могу остаться в ногу с целой командой, должен выполнить devenv.exe на файлах решения непосредственно в моих сценариях процесса сборки.

Существует очень немного make-файлов в моих сборках, где существуют, они находятся в предварительной сборке или сделанных на заказ разделах или отдельном служебном проекте.

3
ответ дан 18 December 2019 в 07:57
поделиться

Одна возможность состоит в том, чтобы использовать CMake - Вы описываете со сценарием, как Вы проектируете, должен быть создан, и CMake генерирует файлы решения/проекта для Visual Studio для Вас.

И если необходимо разработать проект из командной строки, или в непрерывном инструменте интеграции, Вы используете CMake для генерации Make-файла для NMake.

И если Вы проектируете, межплатформенный - можно выполнить CMake для генерации make-файлов для набора инструментальных средств по Вашему выбору.

Простой сценарий CMake похож на это:

project(hello)
add_executable(hello hello.cpp)

Сравните эти две строки с make-файлом или способом, которым Вы устанавливаете простой проект в своем любимом IDE.

Вкратце CMake не делает только cross-platform-enables Вашего проекта, он также делает это перекрестным IDE. Если Вам нравится просто тестировать Ваш проект с затмением или KDevelop или codeblocks, просто выполнять CMake для генерации соответствующих файлов проекта.

Ну, на практике это не всегда настолько легко, но идея CMake просто качается.

Например, если Вы рассматриваете использование CMake с Visual Studio существует некоторая тонкая настройка, требуемая получить знакомое чувство проекта VS, основное препятствие состоит в том, чтобы организовать Ваши заголовочные и исходные файлы, но это возможно - проверяют Wiki CMake (и путем записи короткого сценария, Вы могли бы даже упростить эту задачу).

3
ответ дан 18 December 2019 в 07:57
поделиться

Мы используем devenv.exe (тот же exe, который запускает IDE) разрабатывать наши проекты из сценариев сборки (или командная строка). При определении опции Build / не отображен IDE, и все записывается обратно к консоли (или файл журнала при определении опции Out/),

См. http://msdn.microsoft.com/en-us/library/xee0c8y7 (По сравнению с 80) .aspx для получения дополнительной информации

Пример:

devenv.exe [имя файла решения] / Сборка [название проекта] / Восстанавливает "Release|Win32" / solution.log

где "Release|Win32" является конфигурацией, как определено в решении, и solution.log является файлом, который получает выход компилятора (который довольно удобен, когда необходимо выяснить то, что пошло не так, как надо в компиляции),

1
ответ дан 18 December 2019 в 07:57
поделиться

Лично, я использую Грабли для вызова msbuild на моем решении или проекте. Для регулярной разработки я использую IDE и все преимущества, который обеспечивает.

Грабли настраиваются так, чтобы я мог просто скомпилировать, скомпилируйте и запустите тесты или скомпилируйте запущенные тесты и создайте развертываемые артефакты.

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

Можно также использовать большинство инструментов сборки из IDE, если Вы выполняете эти шаги для установки его.

1
ответ дан 18 December 2019 в 07:57
поделиться

У нас есть программа, которая анализирует vcproj файлы и генерирует фрагменты make-файла от этого. (Они включают список файлов и #defines, и существует некоторая ограниченная поддержка сделанных на заказ шагов.) Эти фрагменты затем включены основным make-файлом, который делает обычный GNU, делают материал.

(Это - все для одной из систем, для которых мы нацелены; его инструменты не имеют никакой собственной поддержки Visual Studio.)

Это не потребовало огромного объема работы. День для установки его, затем возможно, день или два всего для сбивания некоторых проблем, которые сразу не были очевидны. И это работает довольно хорошо: параметрами компилятора управляет основной make-файл (больше никакой игры с теми крошечными текстовыми полями), и все же кто-либо может добавить новые файлы и определяет к сборке обычным способом.

Тем не менее combinatorical проблемы, свойственные к обработке Visual Studio конфигураций сборки, остаются.

1
ответ дан 18 December 2019 в 07:57
поделиться

Почему Вы хотели бы иметь проект, который "компилирует в Windows, который не зависит от проекта VisualStudio"? У Вас уже есть файл решения - можно просто использовать его с консольной сборкой.

Я советовал бы Вам использовать msbuild с соединением с make-файлом, nant или даже простым пакетным файлом, если Ваша система сборки не является столь же замысловатой как наша...

Есть ли что-то, что я пропускаю?

1
ответ дан 18 December 2019 в 07:57
поделиться

Как насчет этого кода?

public TRunner CleanOutput()
{
    ScriptExecutionEnvironment.LogTaskStarted("Cleaning solution outputs");

    solution.ForEachProject(
        delegate (VSProjectInfo projectInfo)
            {             
                string projectOutputPath = GetProjectOutputPath(projectInfo.ProjectName);

                if (projectOutputPath == null)
                    return;

                projectOutputPath = Path.Combine(projectInfo.ProjectDirectoryPath, projectOutputPath);

                DeleteDirectory(projectOutputPath, false);

                string projectObjPath = String.Format(
                    CultureInfo.InvariantCulture,
                    @"{0}\obj\{1}",
                    projectInfo.ProjectName,
                    buildConfiguration);
                projectObjPath = Path.Combine(productRootDir, projectObjPath);
                DeleteDirectory(projectObjPath, false);
            });

    ScriptExecutionEnvironment.LogTaskFinished();
    return ReturnThisTRunner();
}

public TRunner CompileSolution()
{
    ScriptExecutionEnvironment.LogTaskStarted ("Compiling the solution");

    ProgramRunner
        .AddArgument(MakePathFromRootDir(productId) + ".sln")
        .AddArgument("/p:Configuration={0}", buildConfiguration)
        .AddArgument("/p:Platform=Any CPU")
        .AddArgument("/consoleloggerparameters:NoSummary")
        .Run(@"C:\Windows\Microsoft.NET\Framework\v3.5\msbuild.exe");

    ScriptExecutionEnvironment.LogTaskFinished ();
    return ReturnThisTRunner ();
}

Можно найти остальную часть его здесь: http://code.google.com/p/projectpilot/source/browse/trunk/Flubu/Builds/BuildRunner.cs

1
ответ дан 18 December 2019 в 07:57
поделиться

Я еще не попробовал его сам, но Microsoft имеет Сделать реализацию под названием NMake, который, кажется, имеет интеграцию Visual Studio:

1
ответ дан 18 December 2019 в 07:57
поделиться

Visual Studio начиная с VS2005, "msbuild" использования, чтобы определить и выполнить сборки. Когда Вы играете с настройками проекта в разработчике Visual Studio - скажем, Вы включаете или выключаете поколение документа XML, или Вы добавляете новую зависимость, или Вы добавляете новую ссылку проекта или Ссылку на сборку - Visual Studio обновит .csproj (или .vbproj, и т.д.) файл, который является msbuild файлом.

Как муравей Java или Nant перед ним, msbuild использует XML-схему для описания проекта и сборки. Это выполняется из VS, когда Вы делаете сборку "F6", и можно также выполнить его из командной строки, никогда не открытие VS или выполнив devenv.exe.

Так, используйте инструмент VS для разработки и командной строки msbuild для автоматизированных сборок - та же сборка и та же структура проекта.

1
ответ дан 18 December 2019 в 07:57
поделиться
Другие вопросы по тегам:

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