Ваш вопрос немного сбивает с толку, но я попробую его.
Как правило, у вас есть группа исходных файлов C ++, например, x.cpp
и y.cpp
.
Фаза компиляции примет их и создаст, например, x.obj
и y.obj
.
Фаза связи примет их и создаст один исполняемый файл, например, xy.exe
.
1 / Причина, по которой у вас есть "del *.obj"
в командном файле, заключается в удалении всех объектных файлов, чтобы make мог их воссоздать. Make (если вы используете интеллектуальные правила в make-файле) будет перестраивать только те вещи, которые необходимы (например, файл cpp
не будет скомпилирован в файл obj
, если текущий файл obj
имеет более позднюю версию дата, чем это). Удаление объектного файла приведет к созданию нового файла.
2 / В нет в качестве объектного файла, они обычно создаются из исходных файлов c
или cpp
. Кроме того, вы можете комбинировать фазы компиляции и компоновки, чтобы не создавать объектные файлы (или уничтожать их довольно быстро после завершения).
3 / Файл объекта не обязательно должен быть cpp
, но обычно он создается из файла cpp
с тем же базовым именем.
Обновление на основе комментария:
Если вы хотите указать имя приложения только один раз, ваши комментарии будут выглядеть следующим образом (я думаю, формат не такой хороший, как вы указали):
PATH=C:\BORLAND\BCC55\BIN;%PATH%
APP=MyApp
del *.exe
del *.obj
del *.res
make -f$(APP).mak >err.txt
if exist $(APP).exe goto RUN_EXE
:EDIT_ERR
call notepad.exe err.txt
:RUN_EXE
call $(APP).exe
if exist err.txt delete err.txt :END
Я думаю, что вам нужно:
PATH=C:\BORLAND\BCC55\BIN;%PATH%
set APP=MyApp
del *.exe
del *.obj
del *.res
make -f%APP%.mak >err.txt
if exist %APP%.exe goto :RUN_EXE
:EDIT_ERR
call notepad.exe err.txt
goto :END
:RUN_EXE
call %APP%.exe
if exist err.txt delete err.txt
:END
То, что у вас есть с вашими заменами "$(APP)"
, будет работать внутри make-файла, но не внутри cmd-файла. Там вам нужно использовать вариант% APP%, чтобы получить то, что вы хотите.