Компиляция с командной строки

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Компиляция с командной строки

Сообщение RickMan » 03.04.2013 20:03:26

Здравствуйте,
Мне надо выполнить 1 файл через FPC, из командной строки.
У меня Windows 7, FPC 2.4.0 и файл 1.pas, мне надо откомпилировать и выполнить этот файл... сделать то, что делается в паскале при нажатии CTRL+F9

Директория FPC: D:\dev\FPC\2.4.0\bin\i386-win32
Содержимое 1.pas:
Код: Выделить всё
var
        z,y: integer;
        t, f: text;
begin
assign(f, 'input.txt'); reset(f);
assign(t, 'output.txt'); rewrite(t);
readln(f, z, y);
write(t, z+y);
close(f);
close(t);
end.

Содержимое input.txt: 1 2

Выполнял команду: \dev\FPC\2.4.0\bin\i386-Win32\ppc386.exe \dev\FPC\2.4.0\bin\i386-Win32\1.pas
но он мне просто компилировал, создавал 1.exe, но файл output.txt не создавался... Что сделать, чтобы это вот действие произошло?
Заранее благодарю за ответ...
RickMan
незнакомец
 
Сообщения: 8
Зарегистрирован: 03.04.2013 19:47:05

Re: Компиляция с командной строки

Сообщение absdjfh » 03.04.2013 20:12:01

Может быть, вам нужно просто запустить полученный файл (двойным кликом или через командную строку, если вы ее предпочитаете). Прошу извинить, если не так понял вопрос :)
absdjfh
новенький
 
Сообщения: 60
Зарегистрирован: 21.01.2012 13:59:00

Re: Компиляция с командной строки

Сообщение RickMan » 03.04.2013 20:15:27

Да. сглупил, запустил команду \dev\FPC\2.4.0\bin\i386-Win32\1.exe и мне выдало рантайм еррор) Но при двойном клике она создает файл аутпута... В чем может быть беда?
http://clip2net.com/s/4RbMLq - скрин ошибки...
RickMan
незнакомец
 
Сообщения: 8
Зарегистрирован: 03.04.2013 19:47:05

Re: Компиляция с командной строки

Сообщение xdsl » 03.04.2013 20:19:35

не находит в текущем каталоге input.txt, умирает на reset(f)
xdsl
постоялец
 
Сообщения: 131
Зарегистрирован: 15.01.2009 13:49:03

Re: Компиляция с командной строки

Сообщение RickMan » 03.04.2013 20:22:11

А при запуске двойным щелчком, находит и срабатывает... Почему такое может быть?

Добавлено спустя 4 минуты 22 секунды:
Заменил на такое
Код: Выделить всё
assign(f, 'D:\dev\FPC\2.4.0\bin\i386-win32\input.txt');
reset(f);
assign(t, 'D:\dev\FPC\2.4.0\bin\i386-win32\output.txt');
rewrite(t);

сработало...но можно ли как-то указывать параметры и чтобы он брал с текущей директории входной файл а не давать ему полный адрес???
RickMan
незнакомец
 
Сообщения: 8
Зарегистрирован: 03.04.2013 19:47:05

Re: Компиляция с командной строки

Сообщение absdjfh » 03.04.2013 20:32:28

Чтобы не давать полный путь к файлу, вы должны запускать выполняемый файл в соответствующей рабочей папке.
Для этого существует команда cd под windows.
Например:
cd D:\dev\FPC\2.4.0\bin\i386-win32\
1.exe
absdjfh
новенький
 
Сообщения: 60
Зарегистрирован: 21.01.2012 13:59:00

Re: Компиляция с командной строки

Сообщение xdsl » 03.04.2013 20:42:06

Лучше брать paramstr(0) и заменять там имя программы на input.txt. Тогда без разницы будет, откуда и как запускать.
Аналогично для output.txt
xdsl
постоялец
 
Сообщения: 131
Зарегистрирован: 15.01.2009 13:49:03

Re: Компиляция с командной строки

Сообщение RickMan » 03.04.2013 21:05:19

Про cd понял, а вот с paramstr(0) не понял, поподробнее или на примере можно пожалуйста?
RickMan
незнакомец
 
Сообщения: 8
Зарегистрирован: 03.04.2013 19:47:05

Re: Компиляция с командной строки

Сообщение absdjfh » 03.04.2013 21:22:24

Функция ParamStr(0) возвращает полный путь к исполняемому файлу. xdsl предлагает вам воспользоваться им, предварительно заменив (вручную) 1.exe в этой строке на input.txt или output.txt.
Это немного сложнее, но тоже имеет право на существование. Тогда можно запускать файл из любой рабочей папки без предварительной установки командой cd.
При запуске двойным кликом или ctrl+f9 ничего этого не нужно.
absdjfh
новенький
 
Сообщения: 60
Зарегистрирован: 21.01.2012 13:59:00

Re: Компиляция с командной строки

Сообщение xdsl » 03.04.2013 21:25:37

как-нибудь так:
Код: Выделить всё
var s:string; i:byte;
begin
  s:=paramstr(0);
  i:=length(s); while s[i]<>'' do dec(i);
  writeln (copy(s,1,i)+'input.txt');
end.

вне зависимости от способа запуска будет выдавать абсолютное имя input.txt в папке, где лежит исполняемый файл

Добавлено спустя 8 минут 3 секунды:
Если sysutils подключен, то можно еще короче:
Код: Выделить всё
uses sysutils;
begin
  writeln (copy(paramstr(0),1,lastdelimiter('\',paramstr(0)))+'input.txt');
end.
xdsl
постоялец
 
Сообщения: 131
Зарегистрирован: 15.01.2009 13:49:03

Re: Компиляция с командной строки

Сообщение RickMan » 03.04.2013 21:42:22

Спасибо огромное, на днях буду тестировать и буду пробовать варианты эти)
RickMan
незнакомец
 
Сообщения: 8
Зарегистрирован: 03.04.2013 19:47:05

Re: Компиляция с командной строки

Сообщение Sharfik » 16.12.2014 18:56:47

А можно где то найти пример выполнения компиляции проектов lazarus без запуска среды? К примеру через bat файл и fpc напрямую.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 808
Зарегистрирован: 20.07.2013 01:04:30

Re: Компиляция с командной строки

Сообщение v-t-l » 16.12.2014 19:59:45

вроде, lazbuild для этого.
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Компиляция с командной строки

Сообщение alexs » 16.12.2014 20:23:57

Sharfik
В командной строке набрать - lazbuild ВашПроект.lpi
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Компиляция с командной строки

Сообщение svk12 » 16.12.2014 21:45:05

RickMan писал(а):Если sysutils подключен, то можно еще короче:

Код: Выделить всё
uses sysutils;
begin
writeln (copy(paramstr(0),1,lastdelimiter('\',paramstr(0)))+'input.txt');
end.


Можно ещё короче :
Код: Выделить всё
    uses sysutils;
    begin
      writeln (ExtractFilePath(paramstr(0))+'input.txt');
    end.
svk12
постоялец
 
Сообщения: 408
Зарегистрирован: 09.06.2008 18:42:47

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru