2010-04-25 54 views
2

我寫了一個包含一些GPL代碼的小命令行工具。一切都運行良好。使用操作系統10.6。如何在OSX中運行鏈接到指定OS SDK的autoconf

使用的外部代碼有一個config.h頭文件,通過調用autoconf進行。 我想將該工具部署到不同的操作系統版本。因此config.h中可能看起來像

// config.h 
#if MAC_OS_X_VERSION_MAX_ALLOWED == MAC_OS_X_VERSION_10_4 
// autoconf created config.h content for 10.4 comes here 
#elif MAC_OS_X_VERSION_MAX_ALLOWED == MAC_OS_X_VERSION_10_5 
// autoconf created config.h content for 10.5 comes here 
#elif MAC_OS_X_VERSION_MAX_ALLOWED == MAC_OS_X_VERSION_10_6 
// autoconf created config.h content for 10.6 comes here 
#else 
#error "muahahaha" 
#endif 

什麼是告訴autoconf的使用/Developer/SDKs/MacOSX10.XXXX.sdk/usr/而生成的config.h的方式嗎?
爲了測試它,我已經在OS 10.6調用的./configure之前運行

#!/bin/bash 
# for 10.6 
export CC="/usr/bin/gcc-4.2" 
export CXX="/usr/bin/g++-4.2" 
export MACOSX_DEPLOYMENT_TARGET="10.6" 
export OSX_SDK="/Developer/SDKs/MacOSX10.6.sdk" 
export OSX_CFLAGS="-isysroot $OSX_SDK -arch x86_64 -arch i386" 
export OSX_LDFLAGS="-Wl,-syslibroot,$OSX_SDK -arch x86_64 -arch i386" 
export CFLAGS=$OSX_CFLAGS 
export CXXFLAGS=$OSX_CFLAGS 
export LDFLAGS=$OSX_LDFLAGS 

。 我知道configure腳本查找libintl.h,它不在「缺少10.6/SDK」中,但是存在於本地機器的/ usr/local下 config.h頭文件使用所描述的方法生成上面有libintl.h在系統中的信息 - 因此,僅將「autoconf」鏈接到SDK失敗。

這是因爲......「我們沒有水晶球」嗎? :)。或者在運行autoconf之前「setup」/ flag-export不正確,我希望是這樣嗎?如果是這樣,那麼設置envvariables的正確方法是什麼?
非常感謝提前。


編輯。看起來像

#!/bin/bash 
#set to gcc-4.0 for 10.4 
export GCC_VERSION="gcc-4.2" 
#set to g++-4.0 for 10.4 
export GPLUSPLUS_VERSION="g++-4.2" 
# MacOSX10.4u. MacOSX10.5, MacOSX10.6 
export OSX_SDK="/Developer/SDKs/MacOSX10.6.sdk" 
# 10.4, 10.6, 10.6 
export MACOSX_DEPLOYMENT_TARGET="10.6" 
export CC="$GCC_VERSION -isysroot $OSX_SDK -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET" 
export CCX="$GPLUSPLUS_VERSION -isysroot $OSX_SDK -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET" 
export CFLAGS="$CFLAGS -isysroot $OSX_SDK -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET" 
export CXXFLAGS="$CXXFLAGS -isysroot $OSX_SDK -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET" 
export LDFLAGS="$LDFLAGS -isysroot $OSX_SDK -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET" 

訣竅:)無論如何。

回答

1

config.h不是由autoconf創建的。也許這是你的問題中的一個錯字,或者這可能是一個根本性的誤解。 config.h由名爲config.status的shell腳本創建,該腳本由名爲configure的shell腳本編寫。配置腳本是由autoconf生成的,並且生成的config.h將根據運行配置的計算機,運行環境以及傳遞給它的參數而有所不同。

如果您有很多需要傳遞給configure的設置,通常在config.site文件中指定值是很方便的。你可以將config.site放在$ prefix/share(例如/usr/local/share/config.site)中,或者你可以在環境變量CONFIG_SITE中指定一個路徑。這通常比在configure環境中設置東西更受歡迎。

+0

特赦,這是一個「錯字」 - 只是想解釋的情況。在這個特殊情況下,config.h只包含系統中是否存在某些頭文件和函數的信息,因此這種環境變量只能從sdks 10.4-10.6獲取一次配置就足夠了。但是,感謝您的時間和廣泛的解釋! – kroko 2010-04-26 09:29:23

相關問題