2010-07-04 54 views
2

如何使用autoconf宏有條件地更改configure腳本中的值或通過AC_OUTPUT輸出的Makefile中的值。將autoconf中的共享庫ELF項目移植到OS X中

目標是使用AC_CANONICAL_TARGET或其他方式來確定我在OS X上,然後允許我的Makefiles通過刪除-shared並用-dylib_install_name替換-soname來調整LDFLAGS。

所以我基本上需要學習如何使用檢查目標主機的條件語句來修改configure.ac文件中的AC_SUBST值或局部變量。

我必須補充一點,我一直在試圖用AC_COMPILE_IFELSE和AC_LANG_PROGRAM來編譯這段代碼。

#include <unistd.h> 
#ifndef __APPLE__ 
error: This is not apple Darwin 
#endif 

雖然我沒有得到任何錯誤,但我無法真正確認它的工作原理。當我在FreeBSD或Darwin上運行新腳本時,沒有與它相關的輸出。另外我總是使用autoconf-Wall。

AC_COMPILE_IFELSE的第二個和第三個參數是[is_darwin = yes],[is_darwin = no]但是如何訪問這些值?

非常感謝您的幫助。

+0

我想我只是通過在AC_COMPILE_IFELSE的第二個和第三個參數中設置局部變量來解決這個問題。它似乎工作,我只是很難理解這些參數實際上是殼牌執行,所以你可以像使用其他變量一樣使用這些變量。 – 2010-07-04 10:46:08

+1

我不確定你在做什麼,但它聽起來像是在嘗試抽象平臺特定的東西來構建共享庫。如果是這樣,只需使用libtool - 這就是它的存在! – 2010-09-27 03:47:12

回答

0

好,只是爲了解決這個問題我會回答說,AC_COMPILE_IFELSE的第二個和第三個參數中的變量在整個configure.ac腳本中都可以作爲SHELL變量使用。事實上,我通過在這兩個參數中放置多個變量定義來解決這個問題,因爲它們接受多行Shell代碼,而不僅僅是一個變量定義。

+0

你現在應該可以接受你自己的答案。 – 2010-09-29 02:23:30