初學者試圖瞭解整個compliling +鏈接業務。爲什麼我不能像往常一樣使用CGAL庫來構建我的C++程序,並且需要使用CMake來構建它?爲什麼我需要用CMake和CMake構建我的C++程序?
其他問題:我可以在IDE中使用CMake構建嗎? (例如Code :: Blocks?)
@Mike:這是我從閱讀CGAL documentation得到的。我誤解了什麼?
初學者試圖瞭解整個compliling +鏈接業務。爲什麼我不能像往常一樣使用CGAL庫來構建我的C++程序,並且需要使用CMake來構建它?爲什麼我需要用CMake和CMake構建我的C++程序?
其他問題:我可以在IDE中使用CMake構建嗎? (例如Code :: Blocks?)
@Mike:這是我從閱讀CGAL documentation得到的。我誤解了什麼?
你被你提到的CGAL文檔誤導了一些。
CGAL開發者已經選擇CMake作爲CGAL 源碼包的構建系統。它是一個流行的構建系統(跨平臺可移植性卓越)。他們還說明了用CMake構建其示例程序的 ;自然有足夠的自 的例子是源包的一部分。他們還建議您使用CMake來構建您自己的依賴於CGAL的程序。
這對他們來說推薦CMake並不令人意外,這是公平的。 但是:如果要編寫依賴於任何庫的程序 - libfoo
- 則繼續假設libfoo
已準備好在您的項目中使用 。這意味着:
的libfoo
頭文件 - foo.h
,不管是誰 - 定義庫的 編程接口是你的系統上的某個地方,這樣你的編譯器 可以找到並閱讀它們,當你寫,例如#include <foo.h>
在你的代碼中。
的libfoo
二進制文件 - libfoo.a
,libfoo.so
,foo.lib
,foo.dll
, libfoo.dylib
,視情況可能是你的操作系統 - 包含 庫的實現也是系統的某個位置,以便 你的鏈接可以找到他們,將它們與您的 程序的目標代碼鏈接起來以製作完整的可執行文件。 (並且,在動態鏈接庫的情況下,運行時加載程序可以在其中找到它們的位置)。
所以,只要建立您程序而言,它不會在所有問題 的libfoo
頭文件和二進制文件是怎麼成爲他們是你的 系統在何處,無論是放在那裏CMake或仙女。那只是他們在 。然後,你可以用CMake構建你的程序,如果你願意的話,或者你喜歡的任何其他方式 。
當然,當你決定寫你的程序 libfoo
是不您的系統上已經安裝了可能出現的情況。在這種情況下,你安裝它 。然後繼續執行您的程序,假設它的安裝爲
您需要安裝CGAL庫和頭文件。通過安裝由您的操作系統使用其軟件包管理器提供的libcgal
開發包 或通過下載 並運行安裝程序(Windows),通常可以實現 (Linux/OS X)。那麼你不需要知道或關心如何構建CGAL 。
如果由於某種原因無法獲得開發包,或者技術上感興趣的是 從「第一原則」安裝庫,那麼您需要構建並從源包安裝它。由於源代碼包的構建系統是 CMake,您需要學習如何使用CMake進行構建和安裝,並且這樣做。
一旦CGAL 是安裝在自己的項目中使用,你只需要採取的使用庫的日常要求護理 : -
無論你做到這一點與CMake的,使用SCons,自動工具,一個makefile,項目在IDE 設置或只需在命令提示符下 與正確的選項運行你的編譯器和鏈接器完全是你自己的選擇。 (雖然最後是 最有效的指導,當你是一個初學者試圖瞭解 整個編譯和鏈接業務)。
CGAL示例程序可以使用Code :: Blocks作爲普通的 帶有庫依賴性的簡單項目來構建,只要您事先以某種方式安裝CGAL 即可。
請注意,對於CGAL,cmake還會傳遞可能需要的額外標誌('-frounding-math' for gcc),以便編譯器生成正確的代碼,它還會鏈接(和添加頭文件路徑)與一些依賴關係(boost,gmp,...)。它將使用與用於該庫的ABI兼容的ABI編譯示例(在調試二進制文件與發行二進制文件不兼容的平臺上的問題)。事實上,所有這些都可以通過手工完成,但是所有選項的列表尚未由CGAL記錄,並且比一個-I和-l標誌稍長。 –
當您調用cmake時,您可以在命令行上傳遞代碼塊生成器。它會創建你需要使用和建立你的ide文件。
[This](https://cmake.org/about/)解釋了CMake是什麼。這並沒有回答,爲什麼任何圖書館作者選擇使用它,但它告訴你,它有什麼好處。 CMake與某些IDE兼容。 Code :: Blocks是一個您應該避免的IDE,原因很多。 – IInspectable
是什麼讓你相信你需要使用CMake來構建一個與libCGAL鏈接的程序? (將此信息添加到您的問題的正文) –