Как разрешить другим задачам xgsubmitted совместно использовать процессор с задачами сборки Visual Studio?

Я могу использовать incredibuild как пакет расширения визуальной студии для создания моего кода с использованием многих процессоров.

Также я могу использовать команду xgconsole msbuild....

Но если я хочу добавить некоторые другие задачи вместе с vc build одновременно. Итак, я попробовал это несколькими способами:

  1. Используйте пакетный config.bat:

    xgSubmit /command task1
    xgSubmit /command task2
    msbuild  ***.sln /t:rebuild
    

Затем используйте команду

xgConsole /command="config.bat" /profile=pro.xml

Мой pro.xml выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Profile FormatVersion="1">
<Tools>
    <Tool Filename="MSBuild" AllowIntercept="true" />
    <Tool Filename="Tracker" AllowIntercept="true" />
    <Tool Filename="CL" AllowIntercept="true" />
    <Tool Filename="Tracker" AllowRemote="true" />
    <Tool Filename="CL" AllowRemote="false" />
</Tools>
</Profile>

Но проблема в том, что процесс отслеживания создал процесс cl, затем процесс cl создал множество других процессов cl. Поэтому я установил cl как AllowIntercept и AllowRemote в файле конфигурации xml. Но с этой конфигурацией xml xgconsole не может отправлять процессы cl на другие процессоры, просто сообщает об ошибке.

  1. Поэтому я попробовал другой способ: я переименовал Visual Studio cl.exe в clChild.exe и сделал резервную копию другого, назвав его clorigin.exe.

Затем я разработал свой собственный cl.exe. В моем собственном cl.exe я проверяю, что если родительский процесс tracker.exe, то я запускаю clorigin.exe, и передаю ему команду para, затем жду завершения clorigin.exe; если родительский процесс cl.exe, то запускаю clchild.exe.

Но и этот путь бесполезен. Просто, вы можете думать, что это бесполезно.

Поэтому я думаю, что, возможно, мне не следует запускать API clorigin.exe by StartProcess, который просто запускает другой процесс; может быть, я должен сделать это как API execute в unix, когда запускаю дочерний процесс, в диспетчере задач он просто может видеть родительский процесс, что означает, что только родительский процесс завершает задачу другого exe, но не создает новый идентификатор процесса ?

Может быть, я думаю, что это неправильно, но как позволить другим задачам делиться и отправляться на многие процессоры с задачами компиляции Visual Studio одновременно?


person dltigles    schedule 06.12.2014    source источник


Ответы (1)


Использование подключаемого модуля IncrediBuild Visual Studio (или команды BuildConsole) — это самый простой и наиболее оптимизированный (с точки зрения производительности) способ выполнить ваше решение с помощью IncrediBuild. Если вы предпочитаете выполнять свои сборки, используя свой собственный профиль, ваш profile.xml должен выглядеть следующим образом (обратите внимание, что Трекер не должен упоминаться в профиле):

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <Profile FormatVersion="1"> <Tools> <Tool Filename="MSBuild" AllowIntercept="true" /> <Tool Filename="cl" AllowRemote="True" DeriveCaptionFrom="lastparam" VCCompiler="True" VCCompilerUnbatch="True" /> <Tool Filename="link" AllowRemote="false" DeriveCaptionFrom="firstparam" VCLinker="True" MonitorFileChanges="true" />

</Tools> </Profile>

(Писатель работает в IncrediBuild)

person Dori    schedule 05.04.2015