> Проблема в том что я ничего в формате 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)
|