информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Ядро Linux избавляется от российских... 
 20 лет Ubuntu 
 Tailscale окончательно забанила... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[VC++ Linker] Так ты и будешь это делать одним действием 11.12.03 12:00  Число просмотров: 1890
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка>
> Тут дело в том, что хочется именно всего одним макросом это
> переключать
> тоесть одним действием, чтобы не лазать там, сям
Ты будешь только переключать активню конфигурацию. Делаешь, чтобы в одной конфигурации этот макрос был предопределен, а в другой нет, и все. Хотя честно говоря, идея amirul'а мне импонирует куда больше - как-то я забыл, что в Visual C++ тоже мейкфайлы есть.
<programming>
[VC++ Linker] Как макросами поменять имя EXE файла ны выходе? 11.12.03 02:45  
Автор: Disappear Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Такая ситуация: нужно чтобы макрос переключал имя EXE файла при компиляции программы, тоесть например - если макрос defined то имя файла было file1.exe иначе file2.exe
пробовал: #pragma comment(linker, "/OUT:file1.exe") - не получилось, впринципе и в МСДН сказано что так делать нельзя

может есть еще какие хитрые способы?
[VC++ Linker] Makefile? 11.12.03 03:27  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> может есть еще какие хитрые способы?
Если нужно делать что то чересчур хитрое, то без Makefile-а обычно не обойтись.

Чтобы иметь IDE и одну конфигурацию, но иметь возможность собирать разные exe-шники можно поиграться с "Custom Build" или "Post Build" закладками и там переименовывать слинкованный файл.
[VC++ Linker] Post Build? 11.12.03 15:41  
Автор: Disappear Статус: Незарегистрированный пользователь
<"чистая" ссылка>
А как можно в Post Build отловить включен макрос в коде или нет?
[VC++ Linker] Общий ответ: никак 11.12.03 15:49  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> А как можно в Post Build отловить включен макрос в коде или
> нет?
Немного более развернутый: можно этот макрос вынести в отдельный файл (для более простого парсинга), а какой нибудь внешней утилитой выкусывать оттуда его значение (awk вполне справится или собственного написания).

Но мне, как и Ktirf-у больше нравится идея с Makefile-ом :-)
[VC++ Linker] Makefile круто... 11.12.03 16:12  
Автор: Disappear Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > А как можно в Post Build отловить включен макрос в
> коде или
> > нет?
> Немного более развернутый: можно этот макрос вынести в
> отдельный файл (для более простого парсинга), а какой
> нибудь внешней утилитой выкусывать оттуда его значение (awk
> вполне справится или собственного написания).
>
> Но мне, как и Ktirf-у больше нравится идея с Makefile-ом
> :-)

Проблема в том что я ничего в формате makefile не соображаю, но как я подозреваю, для переключений EXE придется уже менять не макрос а строчку в makefile?
[VC++ Linker] Ага 11.12.03 17:05  
Автор: amirul <Serge> Статус: The Elderman
Отредактировано 11.12.03 17:07  Количество правок: 2
<"чистая" ссылка>
> Проблема в том что я ничего в формате makefile не
> соображаю, но как я подозреваю, для переключений EXE
> придется уже менять не макрос а строчку в makefile?
Да, там есть свои переменные и условная компиляция. Лушче всего сделать название результирующего файла сделать переменной.

Синтаксис очень подробно описан в MSDN. Лучше взять готовый (VC6 умеет экспортировать проекты в makefile-ы, в VC.Net я этого не нашел) и подредактировать немного. Там все понятно в принципе

Синтаксис:
цель: цели-зависимости
    команда1
    команда2
.... и так далее

---
Цель - это как подпрограмма в языке программирования. Целью может быть как файл так и произвольное название (почти произвольное). Если у собираемой цели есть цели-зависимости, то сначала собираются они (рекурсивно). А сам процесс сборки цели описывается командами. Команды обязательно должны иметь отступ. Если его нет - то это уже новая цель.

Когда делаешь
nmake -f Makefile
то бишь не указываешь цель явно, то собирается цель all

Замечу, что при такой сборке лучше в VC.Net при создании проекта явно указывать "Makefile Project". Тогда проект можно будет все так же собирать из IDE, но собираться он будет внешней командой (в данном случае nmake).

Короче выглядеть это будет примерно так

Строчку
ALL : "$(OUTDIR)\test.exe"

---

заменяем на
CONFIG=1
!if "$(CONFIG)"=="1"
TARGET=$(OUTDIR)\test1.exe
!else
TARGET=$(OUTDIR)\test2.exe
!endif

ALL: "$(TARGET)"

---

Остальное оставь без изменений. Можешь включить этот Makefile в свой проект и менять номер конфигурации прямо там. Это не труднее, чем переопределение макроса. Также можно вызывать это следующим образом:

nmake -f Makefile CONFIG=2

В общем, для начала сведений достаточно. Дальше MSDN в зубы и вперед на мины :-) Там на самом деле не все так сложно как кажется сначала.

ЗЫ: Вот нашлась и вторая причина по которой я не хочу пересаживаться на VC.Net - не умеет экспортировать Makefile-ы. Первая была, что он не умеет импортировать ключи для компилятора прямо в проект. То есть умеет, но он не строит на их основе новые настройки для проекта, а просто принимает и ничего с ними не делает и в то же время не дает ничего сделать с уже сгенеренными (как в VC6)
[VC++ Linker] Пасибо! 11.12.03 22:56  
Автор: Disappear Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > Проблема в том что я ничего в формате makefile не
> > соображаю, но как я подозреваю, для переключений EXE
> > придется уже менять не макрос а строчку в makefile?
> Да, там есть свои переменные и условная компиляция. Лушче
> всего сделать название результирующего файла сделать
> переменной.
>
> Синтаксис очень подробно описан в MSDN. Лучше взять готовый
> (VC6 умеет экспортировать проекты в makefile-ы, в VC.Net я
> этого не нашел) и подредактировать немного. Там все понятно
> в принципе
>
> Синтаксис:
>
> цель: цели-зависимости
>     команда1
>     команда2
> .... и так далее
> 

---
> Цель - это как подпрограмма в языке программирования. Целью
> может быть как файл так и произвольное название (почти
> произвольное). Если у собираемой цели есть
> цели-зависимости, то сначала собираются они (рекурсивно). А
> сам процесс сборки цели описывается командами. Команды
> обязательно должны иметь отступ. Если его нет - то это уже
> новая цель.
>
> Когда делаешь
> nmake -f Makefile
> то бишь не указываешь цель явно, то собирается цель all
>
> Замечу, что при такой сборке лучше в VC.Net при создании
> проекта явно указывать "Makefile Project". Тогда проект
> можно будет все так же собирать из IDE, но собираться он
> будет внешней командой (в данном случае nmake).
>
> Короче выглядеть это будет примерно так
>
> Строчку
>
> ALL : "$(OUTDIR)\test.exe"
> 

---
>
> заменяем на
>
> CONFIG=1
> !if "$(CONFIG)"=="1"
> TARGET=$(OUTDIR)\test1.exe
> !else
> TARGET=$(OUTDIR)\test2.exe
> !endif
> 
> ALL: "$(TARGET)"
> 

---
>
> Остальное оставь без изменений. Можешь включить этот
> Makefile в свой проект и менять номер конфигурации прямо
> там. Это не труднее, чем переопределение макроса. Также
> можно вызывать это следующим образом:
>
> nmake -f Makefile CONFIG=2
>
> В общем, для начала сведений достаточно. Дальше MSDN в зубы
> и вперед на мины :-) Там на самом деле не все так сложно
> как кажется сначала.
>
> ЗЫ: Вот нашлась и вторая причина по которой я не хочу
> пересаживаться на VC.Net - не умеет экспортировать
> Makefile-ы. Первая была, что он не умеет импортировать
> ключи для компилятора прямо в проект. То есть умеет, но он
> не строит на их основе новые настройки для проекта, а
> просто принимает и ничего с ними не делает и в то же время
> не дает ничего сделать с уже сгенеренными (как в VC6)

А мне кажется на VS .NET лично сишникам не стоит переходить ближайшие год-два. VS .NET вроде как заточен на .NET и C#, поэтому микрософт задачу полной совместимоти c VS6 на первый план не будет ставить.
[VC++ Linker] Боюсь, что ничего лучшего, чем две отдельных конфигурации сборки, посоветовать не могу. 11.12.03 02:50  
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка>
Правда, это дублирование :(
[VC++ Linker] А как я их буду переключать 11.12.03 03:31  
Автор: Disappear Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Тут дело в том, что хочется именно всего одним макросом это переключать
тоесть одним действием, чтобы не лазать там, сям
[VC++ Linker] Так ты и будешь это делать одним действием 11.12.03 12:00  
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка>
> Тут дело в том, что хочется именно всего одним макросом это
> переключать
> тоесть одним действием, чтобы не лазать там, сям
Ты будешь только переключать активню конфигурацию. Делаешь, чтобы в одной конфигурации этот макрос был предопределен, а в другой нет, и все. Хотя честно говоря, идея amirul'а мне импонирует куда больше - как-то я забыл, что в Visual C++ тоже мейкфайлы есть.
[VC++ Linker] Ага. В VC.Net текущая активная конфигурация вынесена на тулбар 11.12.03 15:54  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> > Тут дело в том, что хочется именно всего одним
> макросом это
> > переключать
> > тоесть одним действием, чтобы не лазать там, сям
> Ты будешь только переключать активню конфигурацию. Делаешь,
> чтобы в одной конфигурации этот макрос был предопределен, а
Так что действий будет еще меньше, чем редактирование текста (определение/убирание макроса). Единственная проблема, которая может возникнуть: рассинхронизация этих конфигураций. То бишь, ты можешь в одну из них внести какие то дополнительные настройки, а в другую забыть. Хотя, честно говоря не такая уж это и проблема, если вспомнить как редко обычно меняются настройки.

Так что советую выбирать или этот вариант или немного более сложный в реализации (для новичка), но гораздо более гибкий вариант с Makefile-ом. Вариант с Post-Build-ом я предложил просто для того, чтобы осветить все возможности, но мне честно говоря он кажется самым плохим: и сложный и не гибкий.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach