O、准备工作
在Windows平台使用命令行,与其他操作系统如UNIX/LINUX等,主要区别在于命令名称,选项、参数书写习惯,文件路径查找方式
等,而它们工作的基本思路确没什么太大的不同。
设置环境变量
对于程序员来讲,主要是设置INCLUDE、LIB和PATH这三个环境变量。有一个比较不费力气的方法,就是直接在命令行中执行visual
studio所提供的设置环境变量的脚本,对于C/C++程序设计,设置环境变量的脚本是vcvars.bat。但这种做法有不足之处,每次启动命令
行都需要重新执行这个脚本。
还有一种做法,就是完全手工地设置它们。这样可以让操作者切实地体会一下开发基于命令行的应用程序,将不仅是编程加上点击一下
鼠标那么简单。
一、编译、链接
做为最简单的例子,假设只有一个源文件Main.cpp,它不执行任何动作:
- /*
- * Main.cpp
- * 此代码是为了熟悉在windows平台以命令行方式处理源代码程序的操作
- * 而写,不具有任何实用价值。这段代码,有点头重脚轻的感觉。
- */
- #include <windows.h>
- int WINAPI WinMain(
- HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR szCmdLine,
- int nCmdShow )
- {
- return 0;
- }
对Main.cpp进行编译、链接生成可执行程序的命令是cl Main.cpp,这将产生Main.obj和Main.exe,它们分别是编译和链接阶段的产
物。如果要将这两个阶段分开来进行,那么可以分别使用"cl /c Main.cpp" 和"link Main.obj"进行编译和链接,它们最终的效果是一样的。
陷阱:对于习惯了使用可视化编程工具的程序员来讲,如果按照上面所说的来做,可能会发现根本无法工作。这个示例程序没有调用
任何库函数,因此在链接阶段它不需要任何额外的工作。但如果在程序中添加下面这行代码:
- MessageBox( NULL, L"Hello windows", L"Hello", MB_OK );
那么,编译将无法顺利进行,它会提示缺少某些库。这是因为MessageBox不是C或C++标准库里的函数,它是微软提供的。因此要使用
它,必需在链接时明确指定用了哪个库。
在这种情况下,只进行编译的命令不需要变。进行链接时,则需要指定用到的库的名字,命令为:link Main.obj user32.lib,
它将产生可执行程序Main.exe。也可以直接用cl命令一次性地编译出可执行程序Main.exe:cl Main.cpp user32.lib。
如果在一开始连环境变量也没有设定,那么,编译和链接的命令还需要做进一步的改动,那就是在命令中指定使用到的头文件、库文件所
在的路径。