2017-04-06 27 views
0

我正在嘗試編寫一個Makefile來編譯多個平臺上的C項目,例如:CentOS,OS X,OpenSUSE。但是,我遇到了這個問題,外部庫的頭文件並不總是在同一個地方。我認爲這是由於我無法控制的包裝。如何可靠地包含可能位於不同(未知)目錄中的外部頭文件?

例如: 雖然包括BLAS文件lapacke.h將包括要求發言對我的CentOS安裝 #include<lapacke.h>。在openSUSE路徑是#include<openblas/lapacke.h>

我可以用#include<lapacke.h>,然後用-I/usr/include/openblas編譯,這一點也適用於雙方的CentOS和openSUSE,但是我不希望這包括路徑一般要工作,因爲其他系統可能把openblas不同位置。如何在不需要用戶手動修改Makefile的情況下將此項目配置爲在大多數平臺上編譯?

+0

autotools會爲你做這件事 – cleblanc

+0

當你編寫'#include'行時,你使用正式的名字字符串 - 這個項目的文檔告訴你使用什麼。然後,您可以使用AutoTools('autoconf','automake','libtool'等)和/或'pkg-config'來找出軟件的安裝位置,或者允許用戶指定軟件的安裝位置。你不直接做;這種方式會導致瘋狂 - 尤其是因爲有用戶(例如我)堅持在他們的機器上安裝軟件(主要是因爲軟件沒有擋在我不需要的地方要使用的)。 –

回答

2

如何在不需要用戶手動修改Makefile的情況下將此項目配置爲在大多數平臺上編譯?

由於它一般適用於圖書館,這是一個經典和長期的問題。它是構建配置系統(例如Autotools和CMake)以及pkg-config實用程序的存在理由的一部分。幾個軟件包提供了自己的工具來報告構建細節。

這些都不是萬無一失的。如果你不能或不想依賴任何人,然後你的其他選擇,基本上

  • 使用戶提供所需的路徑(無論是通過編輯文件或提供手卷腳本軟件)或
  • 爲已知系統類型提供了一堆預構建配置,並自動檢測或要求用戶指定系統類型。

我已經看過所有上述內容,單獨和各種組合。

相關問題