4

私はいくつかのGPLコードを含む小さなコマンドラインツールを書きました。すべてがぎこちなく実行されます。os10.6を使用します。

使用される外部コードには、autoconfを呼び出して作成されたconfig.hヘッダーファイルがあります。ツールをさまざまなOSバージョンに展開したいと思います。したがって、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

config.hの生成中に/Developer/SDKs/MacOSX10.XXXX.sdk/usr/を使用するようにautoconfに指示する方法は何ですか?
それをテストするために私は実行しました

#!/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

OS10.6で./configureを呼び出す前。configureスクリプトがlibintl.hを検索することは知っています。これは、「すぐに使用できる10.6 / SDK」には含まれていませんが、ローカルマシンの/ usr/localにあります。上記の方法で作成されたconfig.hヘッダーファイルには次のようなものがあります。 libintl.hがシステムにあるという情報-したがって、SDKにのみautoconfを「リンク」することは失敗しました。

「水晶玉がない」からなのか?:)。それとも、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"  

トリックをしました:)とにかくありがとう。

4

1 に答える 1

2

config.h は autoconf によって作成されません。おそらくそれはあなたの質問のタイプミスか、根本的な誤解です。config.h は、config.status という名前のシェル スクリプトによって作成されます。このシェル スクリプトは、configure という名前のシェル スクリプトによって記述されます。configure スクリプトは autoconf によって生成されるものであり、生成される config.h は、configure が実行されるマシン、実行される環境、およびそれに渡される引数によって異なります。

構成するために渡す必要のある設定が多数ある場合は、多くの場合、config.site ファイルで値を指定すると便利です。$prefix/share (例: /usr/local/share/config.site) に config.site を配置するか、環境変数 CONFIG_SITE でパスを指定することができます。これは通常、構成の環境で設定するよりも優先されます。

于 2010-04-26T06:15:59.747 に答える