Алексей++
глобальный и пушистый
Глобальный модератор
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++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 14-12-2007 07:43 » |
|
собственно, если бы надпись t.obj : warning LNK4070: была не предупреждением , а ошибкой - это тоже бы подошло , хотя тоже не идеально
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #3 : 14-12-2007 13:49 » |
|
А можно спросить - ЗАЧЕМ?
из одного проекта при помощи дефайнов создаётся 3 экзешника с немного разными свойствами. Проект компилится около минуты, босс бегает - быстрее, быстрее. Короче, пару раз уже перепутал с названиями - ругаецо босс ) А так было бы красота
|
|
|
Записан
|
|
|
|
Scorp__)
Молодой специалист
Offline
Пол:
|
|
« Ответ #4 : 14-12-2007 20:40 » |
|
Блин, я в таких случаях выношу настройки в конфигурационный файл (да-да тот самый устаревший ini только хранится вместе с екзешником, а не централизовано). Все потом удивляются, что мне ничего перекомпилировать не надо и одна программа везде работает. По-моему гораздо удобнее, чем условный выбор имени бинарника еще и дефайнами, еще и с перекомпиляцией. Но вот по теме мне сказать нечего никогда даже таких мыслей не возникало.
|
|
|
Записан
|
- А Вы сами-то верите в привидения? - Конечно, нет, - ответил лектор и медленно растаял в воздухе.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #5 : 14-12-2007 20:48 » |
|
Scorp__), так не получится. , дело не просто в настройках , а в разном коде . Например, один файл содержит шифровальный механизм , а другой записывает зашифрованные данные в прибор. Используют много общего кода, но один - для разработчиков, другой - для клиентов. А кроме того, клиетны - они же не поголовно дебилы Залезут в ини и включат, что не положено. И вместе стем клиенты достаточно ленивы, чтобы, обновляя, версию, скачивать новый экзешник + ини )) В общем, если кто подскажет насчёт данной прагмы - было бы просто супер
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #6 : 15-12-2007 06:38 » |
|
Леш, ты просто пошел не тем путем . Делаются три проекта. Весь обший код сбрасывается в обшие библиотеки. В трех проектах путем include добавляеш, то что тебе нужно и дописываеш разницу. В 2005 студии пошли еше дальше. Создается 1 Solution. В него можно добавлять сколько хочещ проектов. Естественно при компиляции, каждый проект будет разносится по своей директории.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #7 : 15-12-2007 07:38 » |
|
Finch, этот путь не приемлим. У меня уже есть проекты, которые пользуются одними h-файлами - это жутко неудобно (хотя и необходимо) и так же требует особой заботы и ухода за архивацией версий проекта. Никаких 3 проекта тут низя делать Это 1 (один) проект , просто из него делается при помощи дефайнов разные экзешники. Переделывать структуру не буду , это сложно, просто думал - кто-нибудь знает ответ на вопрос про /out
|
|
|
Записан
|
|
|
|
Anchorite
Гость
|
|
« Ответ #8 : 15-12-2007 11:25 » |
|
А разве в Студии нельзя создать дополнительные конфигурации к Debug и Release и в них "разрулить" настройки и имена выходных файлов?
|
|
|
Записан
|
|
|
|
Scorp__)
Молодой специалист
Offline
Пол:
|
|
« Ответ #9 : 15-12-2007 12:07 » |
|
В общем, как хочешь, конечно. Но Finch абсолютно прав насчет библиотек. Если есть общий код, то его лучше объединить в библиотеку. Я знаю как не хочется перестраивать то, что уже работает Попробуй из настроек линкера выкинуть имя выходного файла. То есть в командной строке /OUT быть не должно. Тогда скорее всего прагма не будет перекрываться. Дополнительные конфигурации - тоже мысль хорошая
|
|
« Последнее редактирование: 15-12-2007 12:09 от Scorp__) »
|
Записан
|
- А Вы сами-то верите в привидения? - Конечно, нет, - ответил лектор и медленно растаял в воздухе.
|
|
|
Джон
просто
Администратор
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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 15-12-2007 13:58 » |
|
Scorp__), в библиотеку - не выход, там код тоже надо иногда менять , а лазить из проекта в проект обламывает Anchorite, Джон, да, про новую компиляцию мысль понял, действительно можно быстро имя новое задать ) Только есть один минус. У меня первичные - не имя файла , а дефайны. То есть имя должно выбираться от дефайнов , а если я выбираю новую компиляцию, дефайна сами не открюотся - их надо вручную открывать. То есть по прежнему - один хрен. совет Скорпа с удалением /out щас попробую )
|
|
« Последнее редактирование: 15-12-2007 14:13 от Алексей1153++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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 » |
|
Anchorite, Джон, ... У меня первичные - не имя файла , а дефайны. То есть имя должно выбираться от дефайнов, а если я выбираю новую компиляцию, дефайна сами не открюотся - их надо вручную открывать...
Что-то не улавливаю мысль. Поясни пожалуйста на примере.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #15 : 15-12-2007 17:08 » |
|
Алексей1153++, а что мешает эти дефайны в Preprocessor Definitions загнать? (это если они у тебя зачем-нибудь ещё, кроме задания имени, используются) В каждую конфигурацию свой дефайн... Мне кажется, Джон прав - так проще всего...
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #16 : 15-12-2007 17:31 » |
|
Вад, мелькала такая мысль. Расскажи, как это сделать
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #17 : 15-12-2007 17:55 » |
|
6й визуалки под рукой нет, в 7й создаётся новая конфигурация через Build->Configuration Manager (копируешь настройки из дебажной или релизной конфигурации), потом в свойствах проекта для данной конфигурации загоняешь свой дефайн в C/C++->Preprocessor->Preprocessor Definitions, в настройки линковщика - имя файла для текущей конфигурации - и всё Ну ещё, убираешь дефайн непосредственно из кода, чтоб не ругалось на переопределение. Не помню, всё ли так же просто в 6й студии, но, по-моему, эти настройки там тоже доступны - что-то подобное в своё время делать приходилось.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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++ »
|
Записан
|
|
|
|
Вад
|
|
« Ответ #19 : 15-12-2007 18:48 » |
|
Вообще-то, определённый таким образом дефайн должен быть виден во всём участвующем в компиляции коде, потому что на самом деле просто будет производиться компиляция с соответствующим ключом (например, /D "wwww"). Попробовал: если включена прекомпиляция заголовков, то дефайн "появляется" только после stdafx.h. Если прекомпиляция заголовка выключена, то он появляется с самого начала .cpp-файла. Видимо, фича от MS =) Впрочем, логика в этом есть. Что касается синтаксической ошибки - мне не удалось сделать так, чтобы компилятор 7й визуалки её проигнорировал
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #20 : 15-12-2007 18:54 » |
|
Вад, хм... наверное, придётся в настройках писать не рабочие дефайны, а некие "временные", а сразу после stdafx.h по этим "временные" определять рабочие... Иначе - хрен я знаю, где определены эти "временные" а где нет ?
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #21 : 15-12-2007 19:00 » |
|
Ну почему же? Насколько я понимаю, если ты используешь precompiled headers в проекте и не собираешься включать какие-то свои инклуды до включения stdafx.h, то можешь прямо рабочие дефайны в настройках и определять. Должны быть видны везде, включая инклуды в stdafx.h
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #22 : 15-12-2007 19:13 » |
|
Вад, возможно ты прав , но всё же некий там глюк имеется: пишу #ifdef wwww **** #define def_1
#endif
def_1
и всё ок )) кстати, заменяю звёзды на плюсики - тут же ругается, похоже со звёздами тут какой то хитрый момент связан
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #23 : 15-12-2007 19:18 » |
|
а именно вот такой момент: получалось вот такое определение (поскольку количество пробелов и ентеров значения не имеет) ****CCodeVUconvertDialog::CCodeVUconvertDialog(CWnd* pParent): CDialog(CCodeVUconvertDialog::IDD, pParent) { ... }
какая то загадка природы )) Это же синт ошибка , а прокатывает , или я что то не знаю просто ? )) при чём значение имеет то, что это конструктор , с функциями, имеющими тип это не прокатывает
|
|
« Последнее редактирование: 15-12-2007 19:20 от Алексей1153++ »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #24 : 15-12-2007 19:26 » |
|
Звезды это указатель. Скорее всего компилятор это так интерпритирует. Не исповедимы пути компилятора
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #25 : 15-12-2007 19:33 » |
|
ну, я так и подумал , просто почему не ругается не понятно
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #26 : 19-12-2007 05:23 » |
|
а таперича не то, что давеча ...
теперь надо как в программе узнать, какое имя имеет выходной экзешник (то есть имя, что задано в Alt+F7 -> Link , output file name)
нет ли констант (наподобее __FILE__ , __DATE__) содержащих строку сименем ещё на этапе компиляции ? Дабы впендюрить эта радость в какую нибудь константную строку ?
-------------- ну , если нету , то тогда оставлю в дебаге "контролёра" в InitInstance из первого поста
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #27 : 21-12-2007 12:40 » |
|
а нет ли апишной функции, которая умеет не только создавать директорию, но и весь путь к ней , скажем
d:\11\22\33\44 (11,22,33 - таких папок нету ещё)
то есть как например это делает команда MD ?
Или не париться - пользоваться командой ?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #28 : 21-12-2007 12:53 » |
|
b иещё вопросик: где в настройках компиляции можно назначить иконку для выходного файла ? А то имена разнае , а файлы валяются одинаковые ))
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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
|
|
|
Записан
|
|
|
|
|