2016-12-14 124 views
0

我的公司將某些頭文件和庫保存在非標準(但不更改)的位置。Autotools AM_CPPFLAGS(和其他)被忽略?

我在試圖添加標題路徑到版本。如果我定義環境變量CPPFLAGS,我可以添加標題搜索路徑,並找到標題。但是,所有嘗試從configure.ac或src/Makefile.am中設置搜索路徑失敗。

在SRC/Makefile.am我試圖

AM_CPPFLAGS = -I/path/to/headers 

,但沒有找到頭。我嘗試在configure.ac和Makefile.am中設置CPPFLAGS,但這不起作用。我試過

AC_SUBST(CPPFLAGS, ['-I/path/to/headers']) 

使用和不使用單引號,也沒有運氣

我試過放在src/Makefile.am

main_CPPFLAGS = -I/path/to/headers 

我寧願沒有設置一個環境變量。這需要額外的指令和額外的步驟來構建序列(和文檔)。任何想法我失蹤?

附錄

我忘了提,我在MacOS爲ARM主機(不是的iOS)交叉編譯。

以下是src/Makefile.am的消毒版本。目前它有幾種可能性。他們都沒有得到編譯器的-I標誌。設置CPPFLAGS環境變量確實獲取編譯器的-I標誌。

SUBDIRS = . 
bin_PROGRAMS = main 
main_SOURCES = first.h second.h main.cpp 
main_LDADD = -lone -ltwo 
main_CPPFLAGS = -I/path/to/headers 
AM_CPPFLAGS = -I/path/to/headers 
INCLUDES = -I/path/to/headers 
+0

您的'AM_CPPFLAGS = -I/path/to/headers'是正確的,它應該將-I選項傳遞給您的編譯器。我能想到的不是這樣的唯一原因是當你的automake版本很舊,或者因爲交叉編譯導致它與我以前的版本有所不同(我沒有使用autotools來交叉編輯)。 –

回答

0

如果構建系統應該是公開的,不要在你的Makefile.am硬編碼的路徑。

相反,如果它是一個內部生成你想要的解決方案是

INCLUDES = -Ipath/to/headers 
+0

完全內部。我們內部的標準地點。不幸的是,如果放在src/Makefile.am中,這不起作用。那是你想要的地方嗎?我應該提到(編輯問題),我正在ARM的MacOS上進行交叉編譯(不是iOS)。我可能會嘗試在VirtualBox中構建Linux。 – garyp

+0

啊,確實會改變一些東西,'INCLUDES'是爲了工作,但我不確定編譯器會做什麼。你能看看'-I $ path'是否完全傳遞給編譯器嗎?如果不是這樣很奇怪,你能提供一個(正確命名的)'Makefile.am'的樣本嗎? –

+0

包含的路徑沒有出現在對編譯器的調用中。但是,如果我設置了一個環境變量,它*會出現。我會發布Makefile.am – garyp

0

我不能把報價在評論...所以還是讓我添加此這裏。你的Makefile.am應該正式看起來像這樣:「」

AM_CPPFLAGS = -I/path/to/headers 
bin_PROGRAMS = main 
main_SOURCES = first.h second.h main.cpp 
main_LDADD = -lone -ltwo 

,我搬到AM_CPPFLAGS頂端並刪除了SUBDIRS,因爲那些事情傷害了我的眼睛。