Система сборки QBS, не может инициализировать среду с vcvars64.bat - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь реализовать свой собственный модуль для сборки C ++ на Windows с помощью цепочки инструментов clang-cl, поскольку в QBS сейчас нет встроенной поддержки.

Я решил использовать lld-link вместо microsoftкомпоновщик, поэтому я должен предоставить его со всеми путями включения библиотеки MS вручную.С этими жестко закодированными путями мне удается нормально создавать свои приложения.Но я хотел бы сделать мой модуль более гибким и использовать переменную окружения %LIB%, установленную vcvars32.bat | vcvars64.bat

Насколько я понимаю, это можно (нужно?) Сделать внутри модуля setupBuildEnvironment скрипт.Вот что я пытаюсь прочитать %LIB% и терплю неудачу:

import qbs.Environment
import qbs.Process

Module
{
    setupBuildEnvironment:
    {
        var p = new Process();
        p.exec("vcvars64.bat", [], true);
        // makes no difference
        // p.exec("cmd", ["/c", "vcvars64.bat"], true);
        var lib = p.getEnv("LIB");
        // this fails too
        // var lib = Environment.getEnv("LIB");
        console.info("LIB = " + lib);
        p.close();
    }
    ...
}

Это дает мне LIB =, так что я ничего не получаю.Я предполагаю, что процесс уже завершен в момент запроса переменной (p.getEnv("LIB")), следовательно, пустой результат.Документы QBS для Process.getEnv() ничего не указывают в этом отношении.

Каков правильный способ QBS для инициализации среды с помощью vcvars64.bat, и в более широком смысле, как правильно получить среду процесса внутри setupBuildEnvironment?


[update] Ну, смущающе, это было легко обойти, создав простой пакет и полностью избавившись от сценария setupBuildEnvironment:

 @echo off
 call vcvars64 && qbs

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

1 Ответ

0 голосов
/ 21 января 2019

Пакетные файлы vars просто выводят некоторую информацию на консоль. Это никак не влияет на вызывающий процесс. Вам нужно будет проанализировать вывод процесса. Я предлагаю вам взглянуть на элемент MsvcProbe в источниках qbs, чтобы увидеть, как это реализовано для MSVC. Возможно, вы сможете адаптировать код для clang-cl.

...