Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2018, 06:50   #1
lvvas
 
Регистрация: 22.08.2018
Сообщений: 8
По умолчанию Компиляция срр-файла из командной строки Visual Studio

В ручном режиме это решается так:
1) Открываю командную строку Visual Studio 2017
2) Прописываю нужную команду для компиляции файла, например, так: CL /EHsc "D:\Hello.cpp"
3) В результате получаю нужный мне исполнимый файл: Hello.exe
(смотрите рисунок)

Хочу всё это сделать автоматически в консольном приложении С++.
Умею по крайней мере пятью способами открыть командную строку Visual Studio 2017:

Код:
#include <windows.h>
#include <Shellapi.h>
#include <process.h>
#include <iostream>
 
using namespace std;
int main()
{
//первый способ
    STARTUPINFO cif;
    ZeroMemory(&cif, sizeof(STARTUPINFO));
    PROCESS_INFORMATION pi;
CreateProcess(L"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\Tools\\VsDevCmd.bat", NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &cif, &pi);  
 
//второй способ
WinExec("\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\Tools\\VsDevCmd.bat\"", SW_SHOWNORMAL);
 
//третий способ 
system("start /D \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\Tools\\\" VsDevCmd.bat");
 
//четвёртый способ
ShellExecuteA(NULL, NULL, "\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\Tools\\VsDevCmd.bat\"", NULL, NULL, SW_RESTORE); 
 
//пятый способ
spawnl(P_WAIT, "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\Tools\\VsDevCmd.bat", "...", NULL);
 
 
return 0;
}
Но ни в одном из способов никак не могу прописать параметры: CL /EHsc "D:\Hello.cpp"
чтобы при открытии командной строки автоматически компилировался файл Hello.cpp

Может подскажете как это сделать?
Изображения
Тип файла: png компиляия.png (38.9 Кб, 127 просмотров)
lvvas вне форума Ответить с цитированием
Старый 22.08.2018, 08:05   #2
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Сработает ли во всех способах не знаю. По идее, в WinExec, system и ShellExecute должно:
Код:
"[путь]\\VsDevCmd.bat & cl /EHsc D:\\Hello.cpp"
Можно также генерить на лету временный bat-файл и исполнять его:
Код:
@echo off
call [путь]\VsDevCmd.bat
cl /EHsc "D:\Hello.cpp"
Vapaamies вне форума Ответить с цитированием
Старый 22.08.2018, 10:35   #3
lvvas
 
Регистрация: 22.08.2018
Сообщений: 8
По умолчанию

УРА-А-А-А-А!!!! Заработало!!!
Кто бы мог подумать, что всё из-за отсутствия значка &
Так не работает:
Код:
WinExec("\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\Tools\\VsDevCmd.bat\"  cl /EHsc \"D:\\Hello.cpp\"", SW_SHOWNORMAL);
А так работает:
Код:
WinExec("\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\Tools\\VsDevCmd.bat\" & cl /EHsc \"D:\\Hello.cpp\"", SW_SHOWNORMAL);
Пересмотрел десятки руководств и нигде об этом значке & ничего не упоминается...
Огромное спасибо, Vapaamies.
(где тут кнопочка, чтобы сказать "спасибо" или поставить Вам лайк?)

Последний раз редактировалось lvvas; 22.08.2018 в 10:38.
lvvas вне форума Ответить с цитированием
Старый 22.08.2018, 10:44   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от lvvas Посмотреть сообщение
Пересмотрел десятки руководств и нигде об этом значке & ничего не упоминается...
В любом справочнике по командной строке винды есть.
p51x вне форума Ответить с цитированием
Старый 22.08.2018, 14:36   #5
lvvas
 
Регистрация: 22.08.2018
Сообщений: 8
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
В любом справочнике по командной строке винды есть.
А не могли бы Вы, дать ссылочку на подобный справочник?
Например в Help командной строки о таком значке & в параметрах ни слова нет... (смотрите рисунок)
Изображения
Тип файла: jpg help.jpg (100.8 Кб, 124 просмотров)
lvvas вне форума Ответить с цитированием
Старый 22.08.2018, 15:01   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А зачем вам хелп по команде старт? Мы же о самом cmd говорим...
https://habr.com/post/218759/
p51x вне форума Ответить с цитированием
Старый 26.08.2018, 10:32   #7
lvvas
 
Регистрация: 22.08.2018
Сообщений: 8
По умолчанию

Новая проблема.
Мне нужно сохранить откомпилированный (исполнимый) файл в определённую папку (директорию). Например, просто на диске D.

По умолчанию компилятор сохраняет ехе-файл в папке source текущей учетной записи.
В руководствах нашел, что можно переопределить место выходного файла параметром OUT
https://msdn.microsoft.com/ru-ru/library/37b80k4a.aspx
https://msdn.microsoft.com/ru-ru/library/8htcy933.aspx


Исходя из синтаксиса командной строки
https://msdn.microsoft.com/ru-ru/library/610ecb4h.aspx
куда только не пробовал тыкать этот самый /OUT но всё безуспешно.
Что я снова не так делаю?
Код:
tring s = "\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\Tools\\VsDevCmd.bat\" &cl /EHsc \"D:\\code.cpp\" /OUT:\"D:\\code.exe\"";
WinExec(s.c_str(),SW_HIDE);
Код:
std::string s = "\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\Tools\\VsDevCmd.bat\" &cl /EHsc \"D:\\code.cpp\" /LINC /OUT:\"D:\\code.exe\"";
WinExec(s.c_str(),SW_HIDE);
не работает...
что, опять каке-то значки, типа & не поставил?

Последний раз редактировалось lvvas; 26.08.2018 в 10:55.
lvvas вне форума Ответить с цитированием
Старый 27.08.2018, 06:21   #8
lvvas
 
Регистрация: 22.08.2018
Сообщений: 8
По умолчанию

Протупил.
Всё работает. Просто нужно link вместо linc.
lvvas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
компиляция программы в Visual Studio на mac Vano90 Помощь студентам 7 20.06.2016 12:14
Компиляция в Visual Studio 2012 Hellgate Помощь студентам 2 01.10.2013 12:09
Компиляция из командной строки Wicort C++ Builder 1 13.03.2012 10:31
Ошибка в командной строке Visual Studio k1r1ch Visual C++ 2 06.12.2009 20:34
MS Visual Studio компиляция с ошибкой! terran4ic Помощь студентам 16 02.10.2009 15:19