2016-08-26 64 views
1

爲什麼使用find_package()?爲什麼使用find_package?

爲什麼不

include_directories(./extlibs/include/) 
link_directories(./extlibs/lib/) 

然後你用你的程序鏈接:

target_link_libraries(${YOURPROJECT} libA libB) 

我不知道,因爲我看到幾個理由不使用find_package:

  • 你必須寫爲每個庫一個新的(即沒有它)
  • 這Find.cmake返回庫哪裏可以鏈接Lib_LIBRARY,或者 Lib_LIBRARIES,或者LIB_LIBRARY,LIB_LIBRARIES ...沒有這個標準嗎? - >容易出錯
  • LIB_INCLUDE可能包含您可能想要了解的其他定義(或自定義,例如-DFLOAT_PRECISION)
  • 這需要爲存儲在我的存儲庫上的新用戶提供額外的知識。
+2

你的問題似乎聲稱該軟件包包含在本地代碼中。因爲包含「./」。如果軟件包包含在源代碼中,則沒有任何理由去查找它。你知道它在哪裏。但是如果你需要一個庫並且你沒有將它包含在你的源代碼中,那麼你需要去尋找它。 –

回答

2

因爲我沒有一個文件夾extlib

好的,嚴重的是,您電腦的安裝程序只能從您的電腦進行安裝。如果您只想爲您的設置或有限數量的系統開發相應的配置,則不需要CMake及其find_package機制。您也可以使用普通的Makefiles或輸入編譯命令到您的終端並使用bash歷史記錄。

find_package可以方便地編寫通用的跨平臺配置腳本。我甚至不知道Windows系統上的標頭安裝在哪裏。但是,當我按照CMake的方式編寫它時,它會起作用,Windows用戶知道如何告訴你的軟件去哪裏尋找標題,庫和任何需要完成的工作。

關於你的理由不使用它:

  • 的想法是,越來越多的圖書館提供任何FindMyLib.cmake文件,甚至更好MyLib中,config.cmake文件。至少對於C++來說,提供這些文件的庫的數量正在增長。
  • 許多基礎庫非常簡單,您可以在十幾個CMake行中找到它們的頭文件和庫。
  • 約定變量應該如何命名,但它們沒有執行,很多糟糕的遺留代碼仍然存在。
  • 該軟件的作者編寫一次他的代碼,然後所有用戶都可以從中受益。對作者來說可能不方便,但如果它的工作,你幾乎不得不再次觸摸它。