Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как задать имя выходного файла, на этапе компиляции программы? 
:(
    Опции темы
Coder
Дата 1.10.2007, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: 5
Всего: 11



Мне нужно гибко изменять имя выходного файла, в зависимости от компилируемой версии (определяется через $ifdef)
Я проглядел раздел справки Delphi compiler directives (list), но нужной директивы не нашел. Как это сделать другими способами?
PM MAIL   Вверх
fse
Дата 1.10.2007, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 28.9.2007
Где: г. Рязань

Репутация: 1
Всего: 1



Привет! Я думаю, что никак нельзя сделать.
Имя выходного файла задаётся в *.dof файле проекта.

Там вроде того:
[Directories]
OutputDir=

Я могу посоветовать сделать только отдельную утилитку, которая будет каждую ново-откомпилированную программку сохранять под своим именем.
Это можно сделать, если в фоновой утилитке будет искаться твой exe-файл и смотреться на его версию.
Напиши подробнее, по каким кретериям должно изменяться имя?
PM MAIL   Вверх
MetalFan
Дата 1.10.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



с пом.директивы $E разве что расширение для библиотеки можно указать...
а имя файла равно названию проекта... 


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Coder
Дата 1.10.2007, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: 5
Всего: 11



fse, слишком накладно.

MetalFan, Ну вот и я тоже так думал. Прийдется так же в ручную переименовывать.

Тема закрыта.


PM MAIL   Вверх
stab
Дата 1.10.2007, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



Coder, если у тебя D2007, там есть Post Build Events, тогда нехитрыми манипуляциями c помощью команд знакомыми нам\мне ещё со времён DOS можно сделать то, что тебе требуется.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Coder
Дата 1.10.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: 5
Всего: 11



stab, у меня Delphi 7. Когда до D2007 доберусь - обязательно попробую, спасибо.
PM MAIL   Вверх
Alexeis
Дата 1.10.2007, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(fse @  1.10.2007,  09:18 Найти цитируемый пост)
Я могу посоветовать сделать только отдельную утилитку, которая будет каждую ново-откомпилированную программку сохранять под своим именем.

  Зачем же утилитку, можно компонентик. Компонент после бросания на форму может по таймеру че нить делать, причем можно сделать так, что это все будет делаться только в Disign Time, или по разному вести себя. Так как это сделано в KOL. Там в Disign time зеркала многое творят, создают файлы записывают текущие настройки в файлы, так что все очень даже реально безо всяких дополнительных программ.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
fse
Дата 2.10.2007, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 28.9.2007
Где: г. Рязань

Репутация: 1
Всего: 1



Хм, что жsmile
Коль уж углубляться, то предложу вообще экстра-вариант: Написание простенькой утилитки для Delphi, некое расширение. Coder, и вариант совсем не накладный;)
Текст программки:

Код

program ExeStore;

uses
  Windows, SysUtils;

var
  ExeFileName: string;
  NewFileName: string;
  FileExt: string;
  Sufix: string;
begin
  ExeFileName := ParamStr(1);
  if not FileExists(ExeFileName) then
  begin
    MessageBox(0, 'Output file not exists', 'storing', MB_OK);
    Exit;
  end;
  Sufix := ' ' + FormatDateTime('dd.mm.yyyy (hh.mm.ss)', Now);
  FileExt := ExtractFileExt(ExeFileName);
  NewFileName := ExeFileName;
  Insert(Sufix, NewFileName, Length(NewFileName) - Length(FileExt) + 1);
  if not RenameFile(ExeFileName, NewFileName) then
  begin
    MessageBox(0, 'Can''t rename file', 'storing', MB_OK);
    Exit;
  end;
end.


Лезим в среде Tools->Configure tools... Там нажимаем Add и в форме указываем:

Title = Exe storing
Program = путь и имя к скомпилированной программе, например C:\Documents and Settings\Sergey\Desktop\ExeStore\ExeStore.exe
Parameters = $EXENAME()

Теперь что получилось.
Когда пишешь проект, то после компиляции в меню Tools жмакаешь наш Exe storing.
Приведённая программа его переименует в тот же файл, но с суфиксом текущего времени.
Это как пример, а вообще, имя исполняемого файла в проекте утилитке передаётся в параметрах, так что сделать с ним можно что угодно;)

p.s. Кстати, меню Tools даёт возможность создания очень полезных вещей!
PM MAIL   Вверх
Coder
Дата 2.10.2007, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: 5
Всего: 11



fse, я немного развил твою идею. Сейчас имя для переименования берется из файла ParamFile.txt лежащего рядом с EXE файлом.
А в этот ParamFile.txt программа сама пишет свое желаемое имя в зависимости от режима:
Код

{$ifdef base}
OutName:='_base';
{$endif}
{$ifdef std}
OutName:='_std';
{$endif}
{$ifdef pro}
OutName:='_professional';
{$endif}


Вот:
Код

program ExeStore;

{$APPTYPE CONSOLE}

uses
  Windows,
  SysUtils;

var
  ExeFileName: string;
  NewFileName: string;
  FileExt: string;
  Sufix: string;
    ParamFile : string;
  F : TextFile;
begin
  ExeFileName := ParamStr(1);
  if not FileExists(ExeFileName) then
  begin
    Writeln('Output file not exists');
    Readln;
    Exit;
  end;
  // из этого файла читаем имя выходного файла
  ParamFile:=ExtractFilePath(ExeFileName)+'ParamFile.txt';
  if not FileExists(ParamFile) then
    begin
      Writeln('File "',ParamFile,'" not exists');
      readln;
      exit;
    end;
  AssignFile(F,ParamFile);
  Reset(F);
  Readln(F,Sufix);
  CloseFile(F);
//  Sufix := ' ' + FormatDateTime('dd.mm.yyyy (hh.mm.ss)', Now);
  FileExt := ExtractFileExt(ExeFileName);
  NewFileName := ExeFileName;
  Insert(Sufix, NewFileName, Length(NewFileName) - Length(FileExt) + 1);
  if not RenameFile(ExeFileName, NewFileName) then
  begin
    Writeln('Can''t rename file');
    Readln;
    Exit;
  end;
end.


fse,  тебе +1 однозначно!

Добавлено через 5 минут и 49 секунд
сейчас тестирую - штука замечательная! и меню Tools с созможностью писать макросами вообще порадовло!
PM MAIL   Вверх
fse
Дата 2.10.2007, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 28.9.2007
Где: г. Рязань

Репутация: 1
Всего: 1



Coder, тоже не дурно, а ещё, можно сделать, если удобно будет, вот так:

В главном модуле пишешь такую псевдо-дериктиву, вроде
{ХОЧУ ИМЯ ...}

А макросом сообщаешь утилитке имя главного модуля.
Утилитка открывает для чтения этот сорс и ищет нашу псевдо-дерективу, на подобии Pos('{ХОЧУ ИМЯ', SourceText). А потом вычленяет то имя, которое хотелось бы екзешке.

Можно и в эту сторону подумать smile
п.с. Так по-тихоньку дойдём до полноценного интерпретатора дельфийских сорсовsmile
PM MAIL   Вверх
Coder
Дата 2.10.2007, 03:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: 5
Всего: 11



Цитата(fse @  2.10.2007,  09:56 Найти цитируемый пост)
В главном модуле пишешь такую псевдо-дериктиву, вроде{ХОЧУ ИМЯ ...}

Да, но тогда прийдется каждый раз это имя заново прописывать.

Я думаю сделать так:

Создать что-то на подобии Alias файлов для имен EXE.
В файле проекта DPR вводим свои директивы для ExeStore:
Код

{EXESTORE
base
std*
pro
}

* - указывает текущую версию. т.е. для изменения выходного имени всего лишь нужно переместить звезду.

У ExeStore есть база соответствия версий и названий (Aliases.ini):
Код

[base]
exename='_base.exe'
[std]
exename='_std.exe'
[pro]
exename='_professional.exe'

Такой файл может быть у каждого проекта свой.

Запускаем ExeStore c именем DPR и $EXENAME()

PM MAIL   Вверх
fse
Дата 2.10.2007, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 28.9.2007
Где: г. Рязань

Репутация: 1
Всего: 1



Хм, вполне рабоче!

Добавлено через 5 минут
Borland что-то не дадумалась! smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.