2013-05-06 64 views
1

我有我這個學期的第一個項目,我一直在問同一個makefile提交。在互聯網上可用的文獻是有點壓倒性的,加上我的懶惰,我來到stackoverflow的簡單答案。我發現this answerBrendan Long是一個很好的開始。入門的Makefile C++(CMake的或gnumake的?)

他給出的例子是:

all: a3driver.o 
g++ -o a3driver a3driver.o 

a3driver.o: a3driver.cpp 
g++ -c a3driver.cpp 

,我明白了。這看起來像我在Unix系統上看到的make文件,以及我用來編譯C++文件(僅用於,不需要理解)的make文件。

然後我進一步搜索和回答this question建議使用CMake的是從我上面粘貼的代碼完全不同。

所以我在這個階段的問題是我應該採取哪個方向?我應該瞭解CMake還是GNUMake?我現在只打算在C++文件上工作。

回答

1

如果你需要編譯而已,那麼你就用做一個或幾個文件真的死了簡單的makefile:

compile: 
     g++ myprogram.cpp -o myprogram 

(注意,行必須與選項卡,而不是空格縮進)。

如果您需要更大的靈活性,你是用C進行正確的道路上。我建議你從他們的好教程或一個簡單的例子開始探索CMake,因爲基礎知識比代碼學習更簡單,而不是從手冊中學習。

我個人opionion是爲了避免因爲不尋常的,詳細的語法,有時害怕初學者和技巧,有經驗的用戶的GNU的Automake(俗稱Autohell)。

編輯:CMake的不是用來編譯,相反,它可以產生 makefile文件對你來說,從項目的綜合描述開始(這裏是要編譯的文件都需要哪些圖書館等?)。它通過檢查庫,識別編譯器並執行其他完整性檢查來完成此操作,否則您需要自行編寫代碼。

1

只有你可以回答這個問題,因爲它很大程度上取決於你的需求。 Cmake是一個「構建控制文件生成器」,而不是構建控制程序。它實際上並不構建代碼:它將創建一個makefile或Visual Studio/Xcode/Eclipse項目文件等。然後使用該構建程序(make,Visual Studio,XCode,Eclipse)實際構建代碼。

CMake的是好的,如果你需要支持所有這些不同類型的整個使用他們的母語構建環境所有這些不同架構的基礎之上。如果你很樂意使用任何你需要構建的體系結構(GNU在所有這些體系上運行make,除Visual Studio之外的所有IDE都可以與本地make進行良好集成),那麼直接使用make就沒有問題。 GNU make有許多先進的特性,使它非常靈活。

我真的不與自動工具的esseks評估同意,雖然我知道這是一個非常普遍的意見。另請注意,automake本身並不使用不尋常的冗長語法:automake文件只是makefile。然而,它們必須被處理,而autoconf就是這樣做的...... autoconf比較隱晦,儘管並不像人們想象的那樣糟糕,取決於你的需求。但這不是討論的地方。

我個人發現cmake格式比autotools更令人討厭和奇怪,它在很多方面都不符合我的需求(例如它支持交叉編譯不如autotools)。但是我不得不說它能夠生成本地項目文件非常好 - 如果你需要的話。