自從IDE 的出現簡化了代碼文件之間關聯性管理後,就沒多少願意用makefile 管理工程的了。makefile 的語法規則也不復雜,加上後續的automake 讓編寫的東西又簡化了不少,但是相比IDE 點一下build 的操作來說依然是沒有可比性的。各個平臺下的IDE 對工程文件的規則都不一樣,想要工程跨平臺唯一適合互通的也就只有makefile 了,想必這也是目前makefile 還依然活躍的重要理由之一吧。
微軟的IDE 從VC 6 以後就越發的對makefile 不友好了,之前的導入導出操作在後續的VS 裏都沒了,估計總覺得GNU Make 不適合壟斷吧,搞了個NMake 的標準,非但沒GNU Make 靈活(嵌套層次支持少,不支持單字符變量)自個的VS 支持起來也不順。
但凡免費的第三方庫,大都只提供makefile 而不提供. vcproj, 搞得想在VS 裏編個庫用用還得自己組織一邊,大工程搞起來甚爲麻煩。筆者被反反覆覆的轉工程折騰幾次後,似乎找到了個救命稻草- VS 的 makefile project 。
這種工程並不能幫你簡化編寫 makefile 的過程,也不能幫你導出已有 vcproj 工程到一個 makefile 裏, 它的目的很簡單就是把符合NMake 規則的makefile 和代碼文件拽到一個虛擬的文件夾裏,方便習慣了用solution explorer(SE) 的人來修改管理這些東西,調用cl.exe 和link.exe 來執行makefile 的內容生成當前平臺下的目標文件(exe|lib|dll) 。與其他工程不一樣的是即便加到solution explorer 裏,源文件並不會編譯中間代碼。
基於以上目的,該工程的Wizard 也很是簡陋:
其實算得上有用的也是左邊的3 個command line, 這裏需要填寫的是nmake xx ,xx 爲makefile 裏定義的某個目標,一般來說makefile 裏都會有all 和clean 這2 個目標,rebuild 無非是把clean + all 放一起就行了。還得去掉默認的輸出,要不和makefile 裏的重複了。點擊finish 以後就可以把工程裏的所有文件按你的習慣加入到SE 中了,需要注意的一點是如果不想寫太複雜的command, 需要保證makefile 文件的命名爲makefile( 大小寫均可) ,並放在該vcproj 文件同級目錄。
從一個makefile 工程到vs 裏的簡化流程應該如下:
1 在源文件夾中頂級目錄下makefile (一般每個子目錄下都會有個makefile )所在位置創建該工程vcproj.
2 按makefile 中的目標填寫command line
3 把工程中需要修改或管理的文件按習慣加入到solution explorer 中
4 點擊編譯,如果失敗就得按照output 的提示適當修改makefile ,常見的問題都是makefile 裏有不符合nmake 規則或是編譯標誌設置的是gcc 環境的那些宏和變量等等。( 如果工程裏有帶.nmake 後綴的文件, 果斷重命名替換原有的makefile)
- ------------------------------------------- ------------------------------------------- ------------------------------------------
這種工程的用法,其實跟命令行方式下,使用nmake是一模一樣的。因爲該工程並不會追蹤makefile中任何文件的信息,對他來說,它的一切關心的便是MAKEFILE,所以MAKEFILE不變,他的一切行爲也不會改變。
並且在工程中任何作出的修改,也不會修改MAKEFILE。
基本上,該工程存在的意義就變成了,僅僅作爲一個文件瀏覽器的前端。就像windows自帶的explorer一樣。其他,它全不關心。
對一個第三方庫的輕量級修改的話,還是有用的!