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

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

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

RickMan
незнакомец
Сообщения: 8
Зарегистрирован: 03.04.2013 19:47:05

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

Сообщение RickMan »

Здравствуйте,
Мне надо выполнить 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 не создавался... Что сделать, чтобы это вот действие произошло?
Заранее благодарю за ответ...
absdjfh
новенький
Сообщения: 60
Зарегистрирован: 21.01.2012 13:59:00

Сообщение absdjfh »

Может быть, вам нужно просто запустить полученный файл (двойным кликом или через командную строку, если вы ее предпочитаете). Прошу извинить, если не так понял вопрос :)
RickMan
незнакомец
Сообщения: 8
Зарегистрирован: 03.04.2013 19:47:05

Сообщение RickMan »

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

Сообщение xdsl »

не находит в текущем каталоге input.txt, умирает на reset(f)
RickMan
незнакомец
Сообщения: 8
Зарегистрирован: 03.04.2013 19:47:05

Сообщение RickMan »

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

Добавлено спустя 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);

сработало...но можно ли как-то указывать параметры и чтобы он брал с текущей директории входной файл а не давать ему полный адрес???
absdjfh
новенький
Сообщения: 60
Зарегистрирован: 21.01.2012 13:59:00

Сообщение absdjfh »

Чтобы не давать полный путь к файлу, вы должны запускать выполняемый файл в соответствующей рабочей папке.
Для этого существует команда cd под windows.
Например:
cd D:\dev\FPC\2.4.0\bin\i386-win32\
1.exe
xdsl
постоялец
Сообщения: 131
Зарегистрирован: 15.01.2009 12:49:03

Сообщение xdsl »

Лучше брать paramstr(0) и заменять там имя программы на input.txt. Тогда без разницы будет, откуда и как запускать.
Аналогично для output.txt
RickMan
незнакомец
Сообщения: 8
Зарегистрирован: 03.04.2013 19:47:05

Сообщение RickMan »

Про cd понял, а вот с paramstr(0) не понял, поподробнее или на примере можно пожалуйста?
absdjfh
новенький
Сообщения: 60
Зарегистрирован: 21.01.2012 13:59:00

Сообщение absdjfh »

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

Сообщение xdsl »

как-нибудь так:

Код: Выделить всё

 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.
RickMan
незнакомец
Сообщения: 8
Зарегистрирован: 03.04.2013 19:47:05

Сообщение RickMan »

Спасибо огромное, на днях буду тестировать и буду пробовать варианты эти)
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

А можно где то найти пример выполнения компиляции проектов lazarus без запуска среды? К примеру через bat файл и fpc напрямую.
v-t-l
энтузиаст
Сообщения: 744
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

вроде, lazbuild для этого.
Аватара пользователя
alexs
долгожитель
Сообщения: 4067
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Sharfik
В командной строке набрать - lazbuild ВашПроект.lpi
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

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.
Ответить