Компиляция файла .cpp из тела другого файла .cpp - PullRequest
0 голосов
/ 02 октября 2011

Я работал над приложением, которое компилирует необработанные файлы .cpp и анализирует их результаты, используя командную строку Microsoft Visual Studio 2010. У меня много проблем, и, кажется, не так много материала об этом онлайн. Вот неприятный код:

#include <iostream>
using namespace std;
...
string name = "cl /EHsc ";
name += "example.cpp";
system("setupcppenv.bat"); // A short batch file I wrote to launch the VC++ cmd prompt without launching another instance of cmd
system(name.c_str());

Когда я выполняю (он пытается скомпилировать example.cpp), я получаю сообщение об ошибке:

фатальная ошибка C1043: iostream: не задан путь включения

Я не очень разбираюсь в пакетных файлах или в использовании компилятора командной строки. Что я делаю неправильно?!

Кроме того, есть ли другой способ компиляции из приложения?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 02 октября 2011

Каждый вызов system() вызывает отдельный процесс, поэтому любые переменные среды, которые вы установили в файле setupcppenv.bat, будут отброшены после завершения этого процесса.

Вместо этого вам следует добавить переменные среды, которые вы устанавливаете в своем файле .bat, в системную среду или, по крайней мере, в среду экземпляра cmd, откуда вы запускаете приложение, чтобы они были унаследованы процессом, начатым вызовом system().

1 голос
/ 02 октября 2011

Я не знаю, что в setupcppenv.bat Я бы предположил, что вы вносите изменения в переменные среды в этом пакетном файле. Происходит следующее: когда пакетный скрипт заканчивается, изменения переменных среды теряются, потому что они ограничены процессом пакетного сценария и его дочерними элементами.

Чтобы установить переменные среды, которые будут работать, используйте в своей программе функции setenv() или putenv().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...