ddk开发 c语言,使用DDK提供的build进行编译驱动一点总结
DDK通過調用build工具進行編譯以及鏈接代碼,而build又是通過傳遞一些編譯的參數調用nmake工具進行解析makefile文件(其中,makefile文件中指定了需要編譯的文件的依賴關系,指定的過程是有順序的,要指明先編譯哪些文件,后編譯哪些文件;不管是build,還是nmake,甚至是VC,它們最終調用的都是cl.exe和link.exe),傳參很多,可以自己查詢文檔;這里邊makefile需要列出一系列的依賴關系,從頭寫makefile會很煩人,大多數情況下我們只需要寫一行:
! INCLUDE $(MAKEENVNT) \makefile.def,想要深入了解去MSDN上看一下,我之后有時間或者遇到這方面的需要的時候再深入看了。
有了自定義的編譯依賴關系或者使用默認的makefile之后,得告訴build編譯哪些文件,這些文件的路徑在哪,這就遇到了source和 dirs文件。source里邊記錄了需要編譯的源文件文件名、包含目錄路徑、庫目錄路徑等,有了目標才能進行編譯是吧?而具體設置自己查詢文檔,繼續說整體流程;多數項目不可能僅僅用了一個文件夾,這就遇到了需要編譯的文件放在不同位置,也就有了dirs文件,這個里邊描述了需要編譯的子目錄路徑,這樣build會依次進入dirs里邊寫的子目錄尋找source進而將所有需要編譯的文件都編譯,生成需要的靜態庫*.lib等等。
整體流程說完了,具體說一下:
001:生成靜態庫的準備:
先設置makefile為默認的那一行,之后編寫dirs和source文件
dirs很簡單,比如:
DIRS=\
filepath1\
filepath2\
filepath3\
filepath4\
filepath5\
右邊的'\'出現在結尾,表示下一行與本行是一行,只不過分行寫,看著清晰
然后具體說一下source:
TARGETNAME:目標驅動的名稱
TARGETTYPE:目標代碼生成類型,寫成DRIVER表示驅動,PROGRAM表示編譯成Win32程序
TARGETPATH:目標代碼生成的路徑
C_DEFINES :相當于C語言中的#define,不過這里邊比如宏定義MY_TYPE,需要前邊加一個"-D",比如這樣:C_DEFINES = -DMY_TYPE1? -DMY_TYPE2
TARGETLIBS:設置代碼所需要的庫
SOURCES:指定此工程需要的所有源文件,只指定C和C++文件,不需要頭文件,比如:
SOURCES=a.c\
b.c++\
c.c\
注意前邊是TAB不是空格,否則不識別,報錯
002:設置編譯環境,平臺等:
使用的的是DDK里邊setenv.bat , 一般這樣調用:
call %DDKROOT%\bin\setenv.bat? %DDKROOT%? %1 %2 %3
其中,DDKROOT是環境變量,一般為:C:\WinDDK\600
%1是編譯方式,chk或者fre,分別對應VC編譯中我們熟悉的debug和release版本
%2是處理器,一般為x86、x64、ia64、AMD64
%3是操作系統,一般有:WXP , WIN7 , WLH
call 了setenv.bat之后就可以編譯了:
build /c /w /g
/c 表示只進行編譯,不進行鏈接
/w 表示采用第三集警報模式
/g 表示默認函數采用標準調用(__stdcall)
這樣就編譯出來了想要的靜態庫*.lib了。
003:
生成驅動:
將編譯好的靜態庫拷貝到最終編譯生成驅動的設置的靜態文件的目錄下,之后使用命令:
build? -b? -w? WXP -nmake? /a
這行批處理所在的目錄為source目錄下,最終就生成了需要的編譯結果:目標驅動,具體細節我也在學習中,初學者,肯定會有理解不到位的地方,希望發現問題的朋友不吝提醒,謝謝。
總結
以上是生活随笔為你收集整理的ddk开发 c语言,使用DDK提供的build进行编译驱动一点总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenGL--纹理贴图基础
- 下一篇: 有哪些大数据书籍推荐 如何系统掌握大数据