2010-04-25 29 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

相关问题