Как запустить autoconf в OSX со ссылкой на указанный OS SDK - PullRequest
2 голосов
/ 26 апреля 2010

Я написал небольшой инструмент командной строки, который включает в себя некоторый код 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

Как настроить autoconf на использование /Developer/SDKs/MacOSX10.XXXX.sdk/usr/ при создании файла config.h?
Чтобы проверить это, я запустил

#!/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 на ОС 10.6. Я знаю, что скрипт configure ищет файл libintl.h, которого нет в «out of box 10.6 / SDK», но он присутствует на локальной машине в каталоге / usr / local Заголовочный файл config.h, созданный описанным выше способом, содержит информацию о том, что libintl.h находится в системе, поэтому «связать» autoconf только с SDK не удалось.

Это происходит потому, что ... "у нас нет хрустального шара"? :). Или это неправильная «настройка» / flag-export перед запуском autoconf, что, я надеюсь, имеет место? Если так, то каков будет правильный способ установки переменных envvariable?
Большое спасибо заранее.


Редактировать. Похоже

#!/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 Ответ

1 голос
/ 26 апреля 2010

config.h не создается autoconf. Возможно, это опечатка в вашем вопросе, или, может быть, это фундаментальное недоразумение. config.h создается сценарием оболочки с именем config.status, который пишется сценарием оболочки с именем configure. Сценарий configure - это то, что генерируется autoconf, и результирующий файл config.h будет отличаться в зависимости от компьютера, на котором выполняется конфигурация, среды, в которой он запущен, и передаваемых ему аргументов.

Если у вас много настроек, которые необходимо передать для настройки, часто бывает удобно указать значения в файле config.site. Вы можете поместить config.site в $ prefix / share (например, /usr/local/share/config.site) или указать путь в переменной окружения CONFIG_SITE. Обычно это предпочтительнее, чем устанавливать настройки в среде configure.

...