Проблема с vcvars32.bat при попытке использовать команду cl Visual Studio для сборки из командной строки с помощью функции system () в программе на C ++ - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь скомпилировать сгенерированный файл cpp из другой программы на C ++.

Для начала (чтобы посмотреть, работает ли команда cl) Я пытаюсь использовать сборку командной строки Visual Studio из программы на C ++ следующим образом:

command ("cl");

Поскольку командная строка C ++ не является командной строкой собственных инструментов, я сначала вызываю:

команда ("C:" / Program Files (x86) / Microsoft Visual \ Studio / 2019 / Community / VC / A Additional / Build / vcvars32.bat "");

Кажется, что все работает нормально, с ожидаемым результатом. Однако, когда я выполняю вызов cl после получения:

'cl' не распознается как внутренняя или внешняя команда.

, что является той же ожидаемой ошибкой, как если бы Я не называл vcvars32.bat.

Если я выполняю точно такой же процесс из обычной командной строки, все работает, но не из программы cmd программы C ++ из моего проекта Visual Studio 2019 C ++ 17.

Я не очень удивлен, что он не работает, я предполагаю, что есть что-то другое со средой проекта C ++, которая, несмотря на успешный вызов vcvars32.bat, не устанавливает переменные среды должным образом .

Кто-нибудь знает, от чего это может зависеть и (если возможно) как исправить? Или у вас есть другое представление о том, как я могу скомпилировать проект на C ++ из другой программы на C ++?

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Я решил проблему, как указал SM, system () открывает новую оболочку между каждым вызовом. Я решил это с помощью оператора & и запустил vcvars32.bat и команду cl в том же системном вызове, который предложил Пол Сандерс.

0 голосов
/ 03 августа 2020

На мой взгляд, cl не на вашем пути. Вам нужно добавить это . Рекомендуемый способ сделать это - запустить командную строку разработчика. Вы можете обратиться к этой ссылке о том, как установить переменные среды CL.

Кроме того, вам необходимо настроить наборы инструментов. Если у вас открыто простое окно командной строки, вы можете запустить пакетный файл vcvarsall.bat с соответствующим аргументом для настройки переменных среды.

  1. В командной строке перейдите на Каталог установки Visual C ++. (Расположение зависит от системы и установки Visual Studio, но обычно это C: \ Program Files (x86) \ Microsoft Visual Studio version \ V C.) Например, введите:

    cd "\ Program Files (x86) \ Microsoft Visual Studio 12.0 \ V C"

  2. Чтобы настроить это окно командной строки для 32-разрядных сборок командной строки x86, в в командной строке введите:

    vcvarsall x86

Возможные аргументы следующие:

x86 (x86 32-bit native)
x86_amd64 (x64 on x86 cross)
x86_arm (ARM on x86 cross)
amd64 (x64 64-bit native)
amd64_x86 (x86 on x64 cross)
amd64_arm (ARM on x64 cross)

Если ERROR: Cannot determine the location of the VS Common Tools Folder возникает при запуске vcvar32, вы можете проверить, есть ли c:\windows\system32 в переменной окружения PATH. Если нет, можете добавить. Потому что vcvar32 будет вызывать команду с именем reg, когда она выполняется. И этой команде reg требуется c:\windows\system32.

...