天天看點

《C程式設計新思維》一第1章 準備友善的編譯環境1.1 使用包管理器

本節書摘來自異步社群《c程式設計新思維》一書中的第1章,第1.1節,作者 【美】ben klemens,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

c程式設計新思維

小心啦,親愛的,因為我要用點技術。

——選自iggy pop的歌曲“search and destroy(尋找與毀滅)”

僅僅有c标準庫是不足以成就大事的。

實際上c的生态環境已經擴充到了c标準之外,也就是說,如果你想順利完成本書的練習(即“自己動手”),你就必須了解如何輕松調用那些常用卻并非iso标準的庫。不幸的是,這一點恰恰被多數教科書所忽略掉,而需要你自己去尋求解決辦法。這也是為什麼你發現c的诽謗者們會告訴你一些自相沖突的言論,比如c已經有40年的曆史了,是以你必須自己完成程式的每個部分——他們恐怕根本從來沒真正連接配接過一個庫。

本章概要如下:

安裝必要的工具。比起那些必須自力更生地尋找每個元件的黑暗時代,現在我們身處的環境要好多了。隻要10到15分鐘(外加下載下傳這些好東西的時間)你就可以安裝好一個完整的開發環境。

如何編譯一個c程式。你其實已經知道了怎麼做這事兒,但是我們需要一個可以調用庫和它們的位置路徑的配置;僅僅輸入cc myfile.c并不會解決這個問題。make指令是用來提供用于編譯程式的最簡單的系統,是以它提供了一個好的讨論模型。在這一部分我将展示給大家一個“最小巧但可用”的makefile,并提供了擴充的空間。

無論我們用什麼系統,我們都會基于組來讨論環境變量,讨論這些環境變量是做什麼的,以及如何配置它們。而當我們準備好了所有的編譯機制之後,就會面臨一個最容易的環境配置調整問題,即添加新的庫。

作為一個附加内容,我們可以用至此學習的知識,準備一個相對簡單的編譯系統,并将允許我們剪切和粘貼代碼到指令行。

針對ide使用者,有一點需要特别說明:你可能不會去使用make指令,但并不是以就說這一章和你沒有關系。因為在任何編譯方法中make指令都會被執行,是以ide環境也有一個類似的方法。如果你知道make指令是如何工作的,将更加容易去配置ide環境。

嘿,老兄,如果你還沒有在使用包管理器的話,那你可真的錯過了好東西。

有幾個原因促使我講述包管理器。

首先,你們中的一些人可能連基本的包管理工具都沒有安裝。為了這部分讀者,我把這部分放在本書的最開始,因為你們需要盡快得到這些工具。一個好的包管理器将為你快速安裝posix子系統、任何你聽說過的語言的編譯器、遊戲、常用的辦公室效率工具,以及幾百種c庫,等等。

其次,作為一個c程式員,包管理器是我們用來安裝常用工作庫的關鍵手段。

再次,當你寫過一定的代碼,你将開始渴望釋出你的代碼,進而完成一個從包的下載下傳者到包的貢獻者的嬗變。本書将送你一程,為你講解怎麼為自動安裝過程準備安裝包,這樣當一個包庫的管理者決定在包庫中包含你的代碼的時候,他也能順利地制作最終的包。

如果你是一位linux使用者,你的計算機已經帶了包管理器,而且你已知道使用它擷取軟體是多麼容易。對于windows使用者,我将詳細講解cygwin。mac使用者有幾種選擇,比如fink和macports。所有的mac下的包管理器都依賴于apple的xcode包,也就是一般在系統安裝CD光牒中所使用的(或者含有安裝程式的目錄,視情況而定),或通過注冊為apple的開發者而得到。

有了包管理器,那麼我們需要什麼包呢?這裡有一個常見的清單。因為每個系統有不同的組織模式,他們中的一些可能也是以不同的方式組合起來的、作為基本包預設安裝的,或者有着奇怪的名字。如果你對一個包不是很确定,不妨下載下傳下來安裝一下,畢竟系統由于安裝了太多的軟體包導緻不穩定或者變慢的時代已經過去。不過,你可能沒有足夠的帶寬(或者甚至沒有足夠的硬碟空間)來安裝每個可以找到的包,是以還是需要一點判斷和選擇的。要是你發現錯過了什麼東西,随時可以折傳回來尋找。必須準備的包如下。

一個編譯器。gcc是必須安裝的;也可能需要clang。

gdb,一個調試器。

valgrind,以便測試你的c記憶體使用錯誤。

gprof,一個代碼剖析器。

make,這樣你就再也不用直接調用編譯器了。

pkg-config,用來尋找庫。

doxugen,用來産生文檔。

一個文本編輯器。理論上說你可以有幾百種選擇。這裡,筆者推薦幾種:

——emacs和vim是那些死硬的極客們喜歡的工具。emacs是包羅萬象的(e代表extensible,擴充);vim則相對采取最簡化主義思路并且對鍵盤輸入者比較友好。如果你覺得自己可能會花費上百小時盯在一個文本編輯器上,那麼花點時間了解一下它們是值得的。

——kate的界面是友好而吸引人的,還提供了一些程式員們所期望擁有的便利工具,比如文法高亮檢查。

——最後建議你試一下nano,該工具非常簡約,并且是基于文本界面的,以至于你連一個gui[1]界面都不需要。

如果你鐘情于ide,那就安裝一個——甚至可以同時安裝幾個。這方面你同樣有很多選擇:

——anjuta:屬于gnome項目。與gnome的gui工具glade可以相容工作。

——kdevelop:屬于kde項目。

——code::block:相對簡單,在windows環境下運作。

——eclipse:簡直就是有很多杯托和把手的豪車。并且是跨平台的。

還有一些軟體你應該安裝,這些工具在随後的幾章裡我們會頻繁用到:

autotools:autoconf、automake、libtool

git

shell的替代品,比如z shell。

當然,還有c庫這些庫可以使你免于“重新發明輪子”的麻煩(或者,用更加精确的比喻:重新發明火車頭)。你可能想要更多的庫,但是本書所使用的一般也就限于如下幾種:

libcurl

libglib

libgsl

libsqlite3

libxml2

c庫包的命名機制并沒有統一标準,是以你必須弄清楚你的包管理器把一個庫打進子包的習慣。典型的習慣是,一方面為最終使用者準備一個包,另一方面同時為将要在自己程式裡使用這些庫的開發者也準備一個包;是以要确認標明了基本包和-dev或-devel的包。有的系統把文檔也分散進一個單獨的包中。也有的要求你單獨下載下傳調試符号表。而且一旦需要,gdb工具将在第一次運作并在發現你缺少調試符号表的時候引導你逐漸完成。

如果你正在使用posix系統,那麼完成前面的工具安裝後,你已經擁有一個完整的開發系統,可以進入程式設計階段了。對于windows使用者,我們将簡短說明一下這個安裝的系統是如何與windows主系統互動的。

繼續閱讀