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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2010, 14:58   #1
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию Запуск компиляции

Подскажите, пожалуйста, каким образом можно запустить с помощью кода на Delphi компиляцию кода на С/C++ , естественно при условии,что на компьютере уже имеется Сишный компилятор (допустим,если установлены Visual Studio или Code::Blocks или Watcom). Конкретно не могу сказать какой компилятор, т.к. подойдет любой вариант. Заранее спасибо за предложенные решения.
tools вне форума Ответить с цитированием
Старый 21.12.2010, 16:46   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Программно в коде на Delphi построить цепочку сборки проекта на C++, какие и куда параметры писать и как сохранять пишется в документации компилятора, а вы уже только следуете этим указаниям.
BOBAH13 вне форума Ответить с цитированием
Старый 21.12.2010, 17:18   #3
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
Лампочка

Цитата:
Сообщение от tools Посмотреть сообщение
Подскажите, пожалуйста, каким образом можно запустить с помощью кода на Delphi компиляцию кода на С/C++ , естественно при условии,что на компьютере уже имеется Сишный компилятор (допустим,если установлены Visual Studio или Code::Blocks или Watcom). Конкретно не могу сказать какой компилятор, т.к. подойдет любой вариант. Заранее спасибо за предложенные решения.
Delphi -> Delphi. Хотел сделать свой sfx-архив: запускал компилятор dcc32.exe, параметром передавал имя проекта .dpr. Использовал WinExec, ShellExecute. Думаю не соврал - давно то было .
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 21.12.2010, 19:16   #4
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

Хм, вот не получается пока ничего.
Из командной строки компилирую файл с помощью двух строк:
сначала %comspec% /k "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86

затем cl /EHsc C:\file.cpp

компиляция проходит успешно, объектный файл и экзешник появляются в папке пользователя C:\Пользователи\<Имя текущего пользователя>

в Delphi пытаюсь выполнить эти же команды поочередно с помощью WinExec или ShellExecute, но ничего не происходит - команды выполняются, но файлов никаких не появляется.

Последний раз редактировалось tools; 21.12.2010 в 19:32.
tools вне форума Ответить с цитированием
Старый 21.12.2010, 20:42   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А как? Покажи код. Возвращают ли какие-нить коды ошибок эти функции?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.12.2010, 20:03   #6
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

Ну, например, так:
// в процедуре нажатия на кнопке
Код:
const
  s_1: PAnsiChar = 'cmd /K "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"';
  s_2: PAnsiChar = 'cmd /K cl /EHsc C:\file.cpp';
var
  ret_1,ret_2: Cardinal;
begin
  ret_1:= WinExec(s_1,SW_SHOW);
  ret_2:= WinExec(s_2,SW_SHOW);
end;
Естественно, файл указанный находится по этому пути.
В обоих случаях функции возвращают значение 2.
В MSDN написано, что значение должно быть больше 31.
Проблема остается пока нерешенной, помогите советом...

Последний раз редактировалось tools; 23.12.2010 в 22:20.
tools вне форума Ответить с цитированием
Старый 23.12.2010, 20:03   #7
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

Действую указанным выше способом, получаю на выходе обоих функций значение 33, значит они выполняются успешно, но файлов объектных и исполнимых как не было, так и нету. Вставляю те же строки в командную строку вручную и все нормально выполняется, нужные файлы появляются в директории C:\Пользователи\<Имя текущего пользователя>
Подскажите, где собака зарыта.
Видимо, ошибка в том,что создаются два отдельных процесса, а нужно в одном процессе в два потока.

Последний раз редактировалось tools; 23.12.2010 в 22:59.
tools вне форума Ответить с цитированием
Старый 24.12.2010, 00:16   #8
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

В общем, проблему решил следующим образом:

Код:
ret_1:= WinExec('cmd /k "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" && cl /EHsc C:\file.cpp',SW_SHOW);
Т.е. объединил две консольных команды оператором && в исходной строке. Файлик откомпилировался, полученные объектный и исполнимый файлы сохранились в папке с проектом на Delphi. Если посмотреть ключи для команды "cl", то, я думаю, можно будет и сменить путь сохранения итоговых файлов.
Ключ /k не обязателен для команды cmd в данном случае, можно и /c поставить на его месте.
tools вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка компиляции Lokos Общие вопросы Delphi 3 07.10.2010 08:17
Ошибка компиляции ImmortalAlexSan C++ Builder 3 20.12.2009 21:19
Ошибка компиляции С++ jeka101 Общие вопросы C/C++ 3 27.03.2009 19:16
Директивы компиляции joker Общие вопросы Delphi 3 10.06.2008 09:41
Опции компиляции satana Паскаль, Turbo Pascal, PascalABC.NET 1 15.10.2007 16:49