2010-05-23 80 views
0

在我正在開發的跨平臺(Windows,FreeBSD)C++項目中,我使用了兩個外部庫Protocol BuffersZeroMQ。在這兩個項目中,我都跟蹤最新的開發分支,所以這些庫經常被重新編譯/替換。在C++中鏈接到外部庫的組織

對於開發場景,哪裏是最好的地方保持libprotobuf.{a,lib}zeromq.{so,dll}?在構建我的項目之前,我是否應該讓構建腳本將其從各自的項目目錄複製到本地項目的目錄中(如MyProjectRoot/libMyProjectRoot/bin)?這似乎更傾向於將事情拋入/usr/local/lib,因爲我不想用最新的實驗版本替換系統範圍內的穩定版本。

只要我指定鏈接的相對路徑,Cmake會發出警告,所以我會懷疑複製是一種更好的解決方案,然後相對鏈接?這是最好的方法嗎?

感謝您的幫助!

回答

1

我建議你不要在源代碼樹周圍複製文件,絕對不允許到系統文件夾,而不是去定義的目標位置 -

  • $ BUILD_TARGET/bin中 - 最終的二進制目的地( .EXE /的.so/.dll文件等)
  • $ BUILD_TARGET/OBJ - 目標文件目的地(.OBJ等)
  • $ BUILD_TARGET/lib目錄 - 靜態庫目的地(.LIB等)

你可以進一步開發埃洛普這個使用優化/調試目標 -

DEBUG

  • $ BUILD_TARGET/BIND - 最終的二進制目標文件(.exe /的.so/.dll文件等)
  • $ BUILD_TARGET/objD - 目標文件目的地( .OBJ等)
  • $ BUILD_TARGET/LIBD - 靜態庫目的地(.LIB等)

RELEASE(優化)

  • $ BUILD_TARGET/BINO - 最終的二進制目標文件(.exe /的.so/.dll文件等)
  • $ BUILD_TARGET/objO - 目標文件目的地(.OBJ等)
  • $ BUILD_TARGET /荔波 - 靜態庫的目標(的.lib等)

可能性是無窮的,在x86/x64等

+0

謝謝您的回答。似乎每當我建立一個庫時,我總是應該指定該庫的完整路徑作爲構建過程的一部分,並且只根據我創建的構建類型來更改輸出的目標。 – 2010-05-26 20:50:24