Я пытаюсь реализовать свой собственный модуль для сборки 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
Но я бы хотел как можно больше избегать пакетного скриптинга, поэтому вопрос остается в силе.