應該如何熟悉GNU工具鏈?例如GCC/Makefile/GDB
有什麼資料能幫助新手了解Linux下開發C/C++的全套工具體系。
最近又在Clion的逼迫下,學了下CMake,發現比Makefile易用。還有如何Vim配合gdb調試之類的。我看過《Linux編程指南》,還想打聽一下有什麼其他資料看看,總之期待老手寫的綜合性簡介,快速帶入門的節奏。另外學習方法也可以推薦一下~
更新:答完以後重新看了一遍題目發現我想得太多了一點。看起來題主只是想要大概知道一下這些工具鏈怎麼用(雖然「全套」這個詞看著有點嚇人)。那麼別被我下面的話嚇倒。就多看看 Github 上各種開源項目是怎麼 build 、 install 的,然後有實際經驗之後大概翻翻手冊,就對整個系統有個大體概念了。 Don"t panic!
首先來一句沒有幫助的話:絕大多數情況下,都沒有必要主動去學習這一套工具鏈,尤其是 autohells (哦不,是 autotools )。新項目的話,可以直接來 CMake 之類;即使是已有項目,大部分時候小項目 Makefile 都不長,用的奇技淫巧不多看看就知道,大項目會有詳盡的 README/INSTALL ,照著用就行,一般不需要動手修改。
如果真的有需求(比如像我之前的實習),那麼可以考慮兩個大 playground :
1. 打包2. LFS個人比較熟悉而且做過的是 1 。簡單來說就是找一些開源項目,去打 deb/rpm 或者是 AUR 包。由於需要符合發行版的 convention ,很多時候不得不需要 patch Makefile ,或者 reconfigure 。找的開源項目可以是比較複雜使用了 autotools 的,這樣就可以照著 autotools 的很多 guide (然而不幸的是沒有哪個寫得真的很好的……)參照實例來理解。還可以試著找官方源里已經有的包,自己打個新版或者有 custom patch 的,然後再對照官方的 rules/spec 來看看。Debian/Fedora 倉庫里很多包的構建都有些「巧妙」(dirty)的 hack ……
2 的話就更是需要自己編譯安裝一堆項目,使用的 toolchain 千奇百怪。不過有個缺點是只要「裝上就行」,可能不像 1 那樣需要追求 elegant 、 uniform ,需要改構建過程的機會更少(大部分時候就是 follow document 打幾條命令)。不過由於我其實沒有完整做過,這也只是我的猜想而已。
最後:我真的不覺得現在這個世界上有幾個人完整明白 autotools 的,尤其是那一套宏語言……親自去用。
gcc 編譯選項和 makefile 資源 匯總
GNU Autotools
工具類的東西,大部分功能是不用的。入門的話要結合應用場景,經常用的多查資料。Linux 下的東西很零散的,沒有一本書可以講的很全。我多年以前還寫過一個簡短的 gcc 教程:gcc-five-minutes
無恥的打個廣告:看我的視頻吧,真的花了心思做的....
推薦你去用qmake,cmake我學過,不過學的沒太懂,感覺qmake不能在爽了,操作很簡單,生成makefile。
GNU工具集的中文文檔都比較完備了。搜索比如「GNU make中文手冊」可以得到。就用GNU工具集編寫調試現在在做的代碼,基本上就熟悉了。剩下的細枝末節問題可以慢慢了解。我認為實現一個操作系統太浮誇了。練習下Linux系統編程就好。LFS我覺得意義不大,Linux kernel make系統太龐大,不便入門。初學還是幾個目錄,十幾個文件這種小工程比較合適。
做完卡耐基梅隆大學的計算機系統導論的全部實驗
don『t panic 用不了幾次,很快就熟悉了,曾經的小小白的經驗
調試多用printf,少用gdb。上面一個答主提到了,看手冊,不過我推薦看英文的手冊。看一看《The Art of Unix Programming》。
推薦閱讀:
※C++ 編程軟體有哪些推薦?有沒有比 vc 6 更好的?
※怎樣用C++實現生產者消費者的模擬?
※C++向上轉型,為什麼不需要強制轉換?
※有沒有一本書,專門講各種UI效果怎麼實現的,而不是講各種庫的使用辦法的?
※打字速度對編程的影響大嗎?