kro*_*oko 5 macos sdk autoconf
我编写了一个小型命令行工具,其中包含一些 GPL 代码。一切都进行得很顺利。使用操作系统 10.6。
使用的外部代码有一个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
Run Code Online (Sandbox Code Playgroud)
在生成 config.h 时告诉 autoconf 使用 /Developer/SDKs/MacOSX10.XXXX.sdk/usr/ 的方法是什么?
为了测试它我已经跑了
#!/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
Run Code Online (Sandbox Code Playgroud)
在 OS 10.6 上调用 ./configure 之前。我知道配置脚本查找 libintl.h,它不在“开箱即用的 10.6 / SDK”中,但存在于本地计算机的 /usr/local 下 使用上述方法生成的 config.h 头文件有libintl.h 在系统中的信息 - 因此仅将 autoconf“链接”到 SDK 失败。
发生这种情况是因为……“我们没有水晶球”吗?:)。或者在运行 autoconf 之前“setup”/flag-export 是否不正确,我希望是这种情况?如果是这样,那么设置环境变量的正确方法是什么?
提前谢谢了。
编辑。好像
#!/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"
Run Code Online (Sandbox Code Playgroud)
成功了:)无论如何,谢谢。
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 中指定路径。这通常优于在配置环境中进行设置。