我会让你证明我的误解。
- 说bat文件中必须有del *.obj
- 它说必须有一个obj文件
- 它说obj文件实际上必须是一个cpp文件
请告诉我你的解释。
http://computerprogramming.suite101.com/article.cfm/the_borland_win32_compiler_guide
谢谢!
最佳答案
你的问题有点令人困惑,但我会尝试一下。
通常,您有一组 C++ 源文件,例如 x.cpp
和 y.cpp
。
编译阶段将采用这些并创建,例如,x.obj
和 y.obj
。
链接阶段将采用这些并创建单个可执行文件,例如 xy.exe
。
1/在批处理文件中有 "del *.obj"
的原因是要删除所有目标文件,以便 make 可以重新创建它们。 Make(如果您在 makefile 中使用智能规则)只会重建需要的东西(例如 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)"
替换的内容可以在 makefile 中使用,但不能在 cmd 文件中使用。在那里你需要使用 %APP% 变体来获得你想要的。
关于C++ 第一次编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1147199/