我正在嘗試編寫一個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的情況下將此項目配置爲在大多數平臺上編譯?
autotools會爲你做這件事 – cleblanc
當你編寫'#include'行時,你使用正式的名字字符串 - 這個項目的文檔告訴你使用什麼。然後,您可以使用AutoTools('autoconf','automake','libtool'等)和/或'pkg-config'來找出軟件的安裝位置,或者允許用戶指定軟件的安裝位置。你不直接做;這種方式會導致瘋狂 - 尤其是因爲有用戶(例如我)堅持在他們的機器上安裝軟件(主要是因爲軟件沒有擋在我不需要的地方要使用的)。 –