2017-02-06 102 views
0

在構建我自己的項目時需要使用第三方makefile的一些幫助。包括使用cmake時的makefile

+0

「我嘗試使用以下內容,但它不起作用......」它不起作用?你期望發生什麼?發生了什麼? – nega

+0

你必須告訴cmake如何解釋gmake + makefile在做什麼。 CMake不僅會奇蹟般地導入一些隨機字符串。它會如何知道這樣做是正確的?它會如何安全地做到這一點?也許如果你提供了gmake + makefile輸出的例子,你想用這個輸出做什麼? – nega

+0

「幹什麼」是什麼意思?只是打印到終端?用這些標誌重建你的第三方庫?將這些標誌寫入文件? – nega

回答

1

有沒有辦法直接到你想要的。 CMake不提供將文件包含到生成文件中的功能。 (即:將一個「3rdparty.mk」包含到CMake生成的Makefile中。)您也不能直接在「CMakeLists.txt」中包含「生成文件類型」(即:生成文件)。 CMake的ExternalProject不會讓你這樣做。

您需要做的是以某種方式「解析」具有您所需信息的生成文件。有很多方法可以做到這一點。例如,您可以編寫一個shell腳本包裝器,它可以根據需要爲您的makefile生成grep文件,然後用您想要定義的變量構建一個CMake命令行,並輸出它或者爲您調用cmake。根據您對shell(或perl,python等)的使用感覺如何,您可能會覺得這是最好的選擇。

如果您知道這些值永遠不會(或很少更改),您可以將它們硬編碼到您的CMakeLists.txt(不推薦)或文件中,您可以include()(更好)。

你也可以留在CMake-land並使用CMake的ExternalProject來幫助你。使用ExternalProject,您可以:

  1. 獲取您的第三方庫(下載,複製,解壓縮等)
  2. 修補這些圖書館的Makefile文件
  3. 運行make這些補丁的makefile

現在,我提到的這個補丁是你必須自己寫的東西,並保持你的主要項目的來源。這個補丁的內容將成爲一個新的目標,使編寫一個文件,您可以通過include()包含在您的CMakeLists.txt中。你可以簡單地開始,並有這個新的目標(例如:make output_variables)寫一個set()命令列表lib_A.cmake。對此感到滿意後,你可以轉向更復雜的輸出;比如寫一個CMake的find_package()會理解的lib_A-config.cmake文件。

當然,最後一個選項可能是最複雜的,但它可能會使您的主項目的維護更容易,減少將來的痛苦。您還將更深入地瞭解CMake。