Скомпилировать другой файл из текущего файла

Я использую Visual Studio 2012.
У меня есть проект консоли Win32, содержащий исходный файл «1.cpp». Я хочу скомпилировать другой файл C ++ (скажем, «2.cpp») из исходного кода «1.cpp».
Я пробовал это:

int main()
{
 system("C:\\\"Program Files (x86)\"\\\"Microsoft Visual Studio 11.0\"\\VC\\vcvarsall.bat");
 system("C:\\\"Program Files (x86)\"\\\"Microsoft Visual Studio 11.0\"\\VC\\bin\\cl.exe /EHsc 2.cpp");
} 

Я делаю это, потому что хочу скомпилировать «2.cpp», используя параметр /D для определения макроса внутри «2.cpp», значение которого вычисляется в «1.cpp».
Что-то вроде этого -:

int main()
{
 string mystring;
 system("C:\\\"Program Files (x86)\"\\\"Microsoft Visual Studio 11.0\"\\VC\\vcvarsall.bat");
 system(("C:\\\"Program Files (x86)\"\\\"Microsoft Visual Studio 11.0\"\\VC\\bin\\cl.exe /EHsc /DMYMACRO="+mystring+" 2.cpp").c_str());
}  

Несмотря на выполнение "vcvarsall.bat" перед вызовом "cl.exe", я все еще получаю сообщение об ошибке: "Программа не запускается, поскольку на вашем компьютере отсутствует файл mspdb110.dll. Попробуйте переустановить программу, чтобы решить эту проблему. . "

Как упоминалось здесь, мне может потребоваться установить некоторые переменные среды.
Есть ли какой-либо способ сделать это без необходимости установить переменные окружения? Если нет, то как я могу установить эти переменные из исходного кода «1.cpp»?


person Anmol Singh Jaggi    schedule 06.06.2014    source источник


Ответы (2)


Я нашел простой способ сделать это -:

system(("C:\\\"Program Files...vcvarsall.bat && C:\\\"Program Files...cl.exe /EHsc /DMYMACRO="+mystring+" 2.cpp").c_str());
person Anmol Singh Jaggi    schedule 06.06.2014

Каждый вызов «системы» порождает новый процесс. Вызов cvarsall в одном процессе не влияет на другой процесс.

Вам нужно создать командный файл с обеими командами и вызвать "system" для

cmd / c mybat.bat

person harper    schedule 06.06.2014
comment
Я не разбираюсь в пакетном программировании. Не могли бы вы показать, как именно преобразовать команды system() в соответствующие им пакетные команды? Другими словами, каково точное содержимое mybat.bat? - person Anmol Singh Jaggi; 06.06.2014
comment
Будет ли это что-то вроде этого? Если да, то, думаю, мне нужно будет создать этот командный файл из программы, используя обработку файлов, а затем вызвать его с помощью system("cmd /c mybat.bat"). Или вы имеете в виду другое? - person Anmol Singh Jaggi; 06.06.2014