2013-11-04 56 views
2

我目前正在嘗試在C++中使用luabind庫設置項目。不幸的是,在我的發行版中,即Arch,這個庫不在官方回購站中,而且AUR中的庫已經過時並且未能編譯。C++項目中的外部庫依賴關係

考慮到我只需要這個項目的庫我認爲我可以通過構建庫然後安裝(複製)包含文件和生成的二進制文件到我的項目的2個子目錄中來創建類似於python的virtualenv的沙盒環境分別稱爲includelib,我將在構建時添加到鏈接和包含路徑。我明白爲什麼在您的項目中分發這些庫是不好的:例如,安全性和錯誤修復。然而,分發DLL幾乎是在Windows上普遍完成的(如果我交叉編譯,我可能會這樣做),而Linux上的遊戲等許多項目傾向於打包它們的庫以避免disrtos之間的不一致。此外,如果需要補丁或分叉版本的lib,我懷疑我會在任何官方回購中找到它。

所以我的問題是:

  • 高於通常的做法說明了什麼我?我應該這樣做嗎?
  • 如果不是,那麼最常見的解決方案是什麼?

注:我使用的CMake的構建自動化,如果它事項

編輯:This question略有礦重疊。

回答

3

您的方法很有趣,但您沒有必要設計一個工作系統,因爲它已經完成了,幸運的是,您離解決方案只有一步之遙!

使用CMake,使用ExternalProject模塊可以輕鬆自動建立和鏈接外部源代碼。

查看http://www.kitware.com/media/html/BuildingExternalProjectsWithCMake2.8.html瞭解有用的信息。

這種方法有幾個優點:

  • 你不必在您的存儲庫中庫的源代碼
  • 你可以指向你知道與作品庫的特定版本/ git的標籤你的軟件或最新版本,如果你一定也不會破壞兼容性
  • 你沒有寫一個完整的CMakeLists.txt文件,以建立一個可能的複雜代碼基礎
  • 你最終可以配置外部項目建設作爲一個靜態庫,所以你不必分發共享庫
  • 你甚至可以完全繞過這個,如果不是必要的,通過嘗試使用通常的find_package調用來檢測系統上庫的工作版本,並且只能回退到建築物它作爲一個外部項目,如果沒有找到
+0

+1 cmake永遠不會得心應手。但是,即使使用ExternalProject模塊,我仍然覺得我正在使用所有庫安裝來污染我的系統。如果我將安裝路徑(庫和頭文件)設置在項目的工作目錄中,可以嗎?(至少對於調試版本,發行版可能會鏈接到系統庫(如果可用或包含它們) – nikitautiu

+1

是的,這就是它的原因應該工作。安裝目錄應位於CMAKE_BINARY_DIR下。整個過程假定沒有系統範圍的修改。 – SirDarius