一 從程序的編譯過程說起
? ? 上一文我們介紹了windows系統下面程序的分類、編譯器、連接器、常用頭文件、庫文件等知識。本文再談一下程序的編譯過程。
相信大家都知道源代碼的編譯過程共分為兩個步驟:一是編譯過程,主要工作是把我們的源代碼翻譯成中間文件,這在windows中就是cl.exe的作用,它將我們的.c文件或者.cpp文件翻譯成中間.obj文件;二是連接過程,主要工作是將多種中間文件、庫文件連接生成可執行文件,這在windows中就是link.exe的作用,它將.obj文件和庫文件等鏈接成exe程序。
本文主要教大家擺脫VS的IDE,用命令行的方式用cl.exe和link.exe編譯和鏈接程序。
二 編寫我們的Test.c文件
? ? 首先我們新建一個test.txt文件,然后重命名為text.c,在該文件中我們填寫如下代碼:
#include?"windows.h" int?APIENTRY?wWinMain(_In_?HINSTANCE?hInstance,?? ?????????????????????_In_opt_?HINSTANCE?hPrevInstance,?? ?????????????????????_In_?LPWSTR????lpCmdLine,?? ?????????????????????_In_?int???????nCmdShow)??? { ??MessageBox(NULL,"Hello?Win32","sdk",MB_ABORTRETRYIGNORE|MB_ICONERROR); ??return?0; }
? ? ? ? #include “windows.h”導入了我們所需要所有windows系統下必須的頭文件。然后我們引入了windows窗口程序的主函數wWinMain。這里簡單解釋下Winmain各個形參的作用:hInstance是當前程序的實例句柄,也就是目前程序所在的內存的位置;hPrevInstance當前程序前一個實例句柄,目前已經廢棄;lpCmdLine是命令行參數,就是我們以命令行的方式執行程序時可以附帶一些函數作為參數;nCmdShow是窗口顯示方式,最大化、最小化那種。我們在主函數中調用了MessageBox定義了一個模式對話框,如果編譯成功,我們執行程序后將會彈出一個對話框。
現在Test.c文件已經編寫完成,我們接下來要做的就是分別編譯和鏈接文件。
三 編譯Test.c
? ? 我們將打開windows的cmd命令行工具,然后切換到我們當前的工作目錄,使用以下命令編譯Test.c文件:
? ? ? ?Cl.exe /c test.c
?
? ? 編譯完成后會在工作目錄下生成test.obj中間文件:
? ? 如果你的命令行提示找不到cl.exe命令等諸如此類的信息,相信你應該明白這是環境函數中沒有引入cl.exe所在的目錄,我們可以先添加該環境變量或者使用全路徑的方式進行引入。如果你生成了test.obj文件說明編譯過程完成了,我們可以開始連接過程了。
四、鏈接生成test.exe
? ? 接下來我們執行下面的命令生成可執行文件:
? ? Link.exe test.obj user32.lib
?
?
? ? ? ? User32.lib這個庫我們在上一文中曾經提到過,它包含了所欲的用戶界面、消息相關的API,我們的需要調用的MessageBox就在這個庫里面定義,如果不出意外,你的工作目錄下應該會生成test.exe這個可執行文件:
? ? 雙擊這個exe,彈出了我們定義的對話框:
?
? ? ? ? OK,試驗結束。我們完全脫離了VS帶界面的IDE生成了一個自定義的對話框,是不是很神奇?此處應該有小岳岳那賤賤的表情。。。
?