Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2 3  Все   Вниз
  Печать  
Автор Тема: название исполняемого файла  (Прочитано 71102 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 14-12-2007 07:21 » 

(где то я уже начинал такую тему - не нашёл Жаль  Тогда не вышло, бросил , а сейчас проблема прижала конкретно)

VC++6
в общем задача такая - сделать условное обзываение экзешника. То есть автоматизировать то, что приходится вписывать в  Alt+F7 -> link -> output file name

пытаюсь пользоваться директивой
Код:
#pragma comment(linker, "/OUT:xxx.eee")

но оно всё равно компилит с указанным в настройках и ещё выводит варнинг
Код:
t.obj : warning LNK4070: /OUT:xxx.exe directive in .EXP differs from output filename "Debug/t.exe"; ignoring directive

а , собственно, чиво он игнорирует, а не заменяет то ?


пока что для самоконтроля пользуюсь костылём:

Код:
BOOL CTApp::InitInstance()
{
//проверка имени
CString csName;
csName=m_pszAppName;//имя файла без расширения

if(csName!="xxx")
{
::MessageBox(0,"имя файла корявое",0,MB_SYSTEMMODAL);
return 0;
}
...
...
« Последнее редактирование: 14-12-2007 07:26 от Алексей1153++ » Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 14-12-2007 07:43 » 

собственно, если бы надпись t.obj : warning LNK4070: была не предупреждением , а ошибкой - это тоже бы подошло , хотя тоже не идеально
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 14-12-2007 12:58 » 

А можно спросить - ЗАЧЕМ?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 14-12-2007 13:49 » 

А можно спросить - ЗАЧЕМ?
из одного проекта при помощи дефайнов создаётся 3 экзешника с немного разными свойствами. Проект компилится около минуты, босс бегает - быстрее, быстрее. Короче, пару раз уже перепутал с названиями - ругаецо босс ) А так было бы красота
Записан

Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 14-12-2007 20:40 » 

Блин, я в таких случаях выношу настройки в конфигурационный файл (да-да тот самый устаревший ini только хранится вместе с екзешником, а не централизовано). Все потом удивляются, что мне ничего перекомпилировать не надо Улыбаюсь и одна программа везде работает. По-моему гораздо удобнее, чем условный выбор имени бинарника еще и дефайнами, еще и с перекомпиляцией.

Но вот по теме мне сказать нечего Жаль никогда даже таких мыслей не возникало.
Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 14-12-2007 20:48 » 

Scorp__), так не получится. , дело не просто в настройках , а в разном коде . Например, один файл содержит шифровальный механизм , а другой записывает зашифрованные данные в прибор. Используют много общего кода, но один - для разработчиков, другой - для клиентов. А кроме того, клиетны - они же не поголовно дебилы Улыбаюсь Залезут в ини и включат, что не положено. И вместе стем клиенты достаточно ленивы, чтобы, обновляя, версию, скачивать новый экзешник + ини Улыбаюсь))

В общем, если кто подскажет насчёт данной прагмы - было бы просто супер Улыбаюсь
Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #6 : 15-12-2007 06:38 » 

Леш, ты просто пошел не тем путем Улыбаюсь. Делаются три проекта. Весь обший код сбрасывается в обшие библиотеки. В трех проектах путем include добавляеш, то что тебе нужно и дописываеш разницу. В 2005 студии пошли еше дальше. Создается 1 Solution. В него можно добавлять сколько хочещ проектов. Естественно при компиляции, каждый проект будет разносится по своей директории.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 15-12-2007 07:38 » 

Finch, этот путь не приемлим. У меня уже есть проекты, которые пользуются одними h-файлами - это жутко неудобно (хотя и необходимо) и так же требует особой заботы и ухода за архивацией версий проекта. Никаких 3 проекта тут низя делать Улыбаюсь Это 1 (один) проект , просто из него делается при помощи дефайнов разные экзешники.
Переделывать структуру не буду , это сложно, просто думал - кто-нибудь знает ответ на вопрос про /out Жаль
Записан

Anchorite
Гость
« Ответ #8 : 15-12-2007 11:25 » 

А разве в Студии нельзя создать дополнительные конфигурации к Debug и Release и в них "разрулить" настройки и имена выходных файлов?
Записан
Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 15-12-2007 12:07 » 

В общем, как хочешь, конечно. Но Finch абсолютно прав насчет библиотек. Если есть общий код, то его лучше объединить в библиотеку. Я знаю как не хочется перестраивать то, что уже работает Улыбаюсь

Попробуй из настроек линкера выкинуть имя выходного файла. То есть в командной строке /OUT быть не должно. Тогда скорее всего прагма не будет перекрываться.

Дополнительные конфигурации - тоже мысль хорошая Улыбаюсь
« Последнее редактирование: 15-12-2007 12:09 от Scorp__) » Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 15-12-2007 12:40 » 

Anchorite, я собственно поэтому и спросил.

Лёш именно так и делается. За 3 сек. Делаешь новую компиляцию и обзываешь её как надо. В ней устанавливаешь имя нужного экзешника, потом просто выбираешь нужную и компилишь. Всё. Быстрее даже чем в дефайне имя менять.

Босс во всяком случае точно запарится бегать.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 15-12-2007 13:58 » 

Scorp__), в библиотеку - не выход, там код тоже надо иногда менять , а лазить из проекта в проект обламывает Улыбаюсь

Anchorite, Джон, да, про новую компиляцию мысль понял, действительно можно быстро имя новое задать ) Только есть один минус. У меня первичные - не имя файла , а дефайны. То есть имя должно выбираться от дефайнов , а если я выбираю новую компиляцию, дефайна сами не открюотся - их надо вручную открывать. То есть по прежнему - один хрен.

совет Скорпа с удалением /out щас попробую )
« Последнее редактирование: 15-12-2007 14:13 от Алексей1153++ » Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 15-12-2007 14:02 » 

хех , студия не позволяет удалять /out !! Улыбаюсь))

хм, даже прямо в файле Un.dsp правил - при открытии проекта студия вставляет out сама
« Последнее редактирование: 15-12-2007 14:12 от Алексей1153++ » Записан

Anchorite
Гость
« Ответ #13 : 15-12-2007 14:25 » new


Anchorite, Джон, ... У меня первичные - не имя файла , а дефайны. То есть имя должно выбираться от дефайнов, а если я выбираю новую компиляцию, дефайна сами не открюотся - их надо вручную открывать...

Что-то не улавливаю мысль. Поясни пожалуйста на примере.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 15-12-2007 14:47 » 

Anchorite, имеется такой набор дефайнов:
Код:
     #define def_1    //настройки для exe1
//   #define def_2    //настройки для exe2
//   #define def_3    //настройки для exe3

так вот - одновременно надо открывать один из этих дефайнов, а после компиляции получается нужный экзешник. Только имя у него, понятно, не такой - лезем в папку RELEASE и вручную переименовываем... А так было бы
Код:
#ifdef def_1
#pragma comment(linker, "/OUT:exe1.exe")
#endif

#ifdef def_2
#pragma comment(linker, "/OUT:exe2.exe")
#endif

#ifdef def_3
#pragma comment(linker, "/OUT:exe3.exe")
#endif
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 15-12-2007 17:08 » 

Алексей1153++, а что мешает эти дефайны в Preprocessor Definitions загнать? (это если они у тебя зачем-нибудь ещё, кроме задания имени, используются) В каждую конфигурацию свой дефайн... Мне кажется, Джон прав - так проще всего...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #16 : 15-12-2007 17:31 » 

Вад, мелькала такая мысль. Расскажи, как это сделать
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 15-12-2007 17:55 » 

6й визуалки под рукой нет, в 7й создаётся новая конфигурация через Build->Configuration Manager (копируешь настройки из дебажной или релизной конфигурации), потом в свойствах проекта для данной конфигурации загоняешь свой дефайн в C/C++->Preprocessor->Preprocessor Definitions, в настройки линковщика - имя файла для текущей конфигурации - и всё Улыбаюсь Ну ещё, убираешь дефайн непосредственно из кода, чтоб не ругалось на переопределение. Не помню, всё ли так же просто в 6й студии, но, по-моему, эти настройки там тоже доступны - что-то подобное в своё время делать приходилось.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #18 : 15-12-2007 18:23 » 

Вад, ага, всё нашлось , спасибо ) Только есть непонятности:

добавил в настройки дефайн wwww

В каком файле он "появится" ? (имеется в виду - его невидимый эквивалент, то есть если бы я его не в настройках вписал, а в программу)

ощущение такое, что дефайн виден не везде:

потому что пробую такое (названия инклудов из проекта, но они не важны, разве что только stdafx.h):
Код:
#ifdef wwww
//#error "1"   //не показывает ошибку
#endif

#include "stdafx.h"

#ifdef wwww
//#error "2"   //показывает
#endif

#include "un.h"

#ifdef wwww
//#error "3"   //показывает
#endif

#include "CodeVUconvertDialog.h"

#ifdef wwww
//#error "4"   //показывает
#endif

#ifdef wwww
****           //НЕ реагирует !!!
#endif


так вот: wwww виден после stdafx.h , как я понял, но почему то там, где "****" - синтаксическую ошибку игнорирует , а #error видит

что за проблема такая
« Последнее редактирование: 15-12-2007 18:29 от Алексей1153++ » Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 15-12-2007 18:48 » 

Вообще-то, определённый таким образом дефайн должен быть виден во всём участвующем в компиляции коде, потому что на самом деле просто будет производиться компиляция с соответствующим ключом (например, /D "wwww").  Попробовал: если включена прекомпиляция заголовков, то дефайн "появляется" только после stdafx.h. Если прекомпиляция заголовка выключена, то он появляется с самого начала .cpp-файла. Видимо, фича от MS =) Впрочем, логика в этом есть.
Что касается синтаксической ошибки - мне не удалось сделать так, чтобы компилятор 7й визуалки её проигнорировал Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #20 : 15-12-2007 18:54 » 

Вад, хм... наверное, придётся в настройках писать не рабочие дефайны, а некие "временные", а сразу после stdafx.h по этим "временные" определять рабочие... Иначе - хрен я знаю, где определены эти "временные" а где нет ? Отлично
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 15-12-2007 19:00 » 

Ну почему же? Насколько я понимаю, если ты используешь precompiled headers в проекте и не собираешься включать какие-то свои инклуды до включения stdafx.h, то можешь прямо рабочие дефайны в настройках и определять. Должны быть видны везде, включая инклуды в stdafx.h
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #22 : 15-12-2007 19:13 » 

Вад, возможно ты прав , но всё же некий там глюк имеется:

пишу
Код:
#ifdef wwww
****
#define def_1

#endif

def_1

и всё ок ))

кстати, заменяю звёзды на плюсики - тут же ругается, похоже со звёздами тут какой то хитрый момент связан
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #23 : 15-12-2007 19:18 » 

а именно вот такой момент:

получалось вот такое определение (поскольку количество пробелов и ентеров значения не имеет)
Код:
****CCodeVUconvertDialog::CCodeVUconvertDialog(CWnd* pParent): CDialog(CCodeVUconvertDialog::IDD, pParent)
{
  ...
}

какая то загадка природы Улыбаюсь))  Это же синт ошибка , а прокатывает , или я что то не знаю просто ? ))

при чём значение имеет то, что это конструктор , с функциями, имеющими тип это не прокатывает
« Последнее редактирование: 15-12-2007 19:20 от Алексей1153++ » Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #24 : 15-12-2007 19:26 » 

Звезды это указатель. Скорее всего компилятор это так интерпритирует. Не исповедимы пути компилятора Улыбаюсь
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #25 : 15-12-2007 19:33 » 

ну, я так и подумал , просто почему не ругается не понятно Отлично
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #26 : 19-12-2007 05:23 » 

а таперича не то, что давеча ...

теперь надо как в программе узнать, какое имя имеет выходной экзешник (то есть имя, что задано в Alt+F7 -> Link , output file name)

нет ли констант (наподобее __FILE__ , __DATE__) содержащих строку сименем ещё на этапе компиляции ? Дабы впендюрить эта радость в какую нибудь константную строку ?

--------------
ну , если нету , то тогда оставлю в дебаге "контролёра" в InitInstance из первого поста
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #27 : 21-12-2007 12:40 » 

а нет ли апишной функции, которая умеет не только создавать директорию, но и весь путь к ней , скажем

d:\11\22\33\44
(11,22,33 - таких папок нету ещё)

то есть как например это делает команда MD
?

Или не париться - пользоваться командой ?
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #28 : 21-12-2007 12:53 » 

b иещё вопросик: где в настройках компиляции можно назначить иконку для выходного файла ? А то имена разнае , а файлы валяются одинаковые Улыбаюсь))
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #29 : 21-12-2007 17:30 » 

нашёл )

в файле *.rc  , в описании иконок имщем строчку
Код:
IDR_MAINFRAME        ICON    DISCARDABLE     "res\\.....ico"

и при помощи дефайнов выбираем нужную икону

Код:
#if defined def_1
IDR_MAINFRAME        ICON    DISCARDABLE     "res\\.....ico"
#elif defined def_2
IDR_MAINFRAME        ICON    DISCARDABLE     "res\\.....ico"
#else
IDR_MAINFRAME        ICON    DISCARDABLE     "res\\.....ico"
#endif
Записан

Страниц: [1] 2 3  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines