2013-03-08 2 views
3

Большое разнообразие проектов с открытым исходным кодом распределено в исходном коде и должно быть скомпилировано с использованием подхода ./configure && make. Но если я хочу перекрестно скомпилировать, на каком из этих двух шагов я должен сказать им, какой целевой платформой я хочу получить двоичный файл?Когда/как указать configure/make target

Это связано с настройкой/изготовлением в целом, или это характерно для каждого проекта? Что может быть примером компиляции какого-либо проекта, библиотеки или консольного приложения и указания целевого?

Я знаю, что у многих проектов есть веб-страница на своих сайтах, посвященная «перекрестной компиляции этой программы». Поэтому, похоже, это зависит от проекта. Но проект по-прежнему использует configure/make, так что же такое отношение всего этого?

ответ

4

Если ваша система использует стандартный GNU autoconf, вы всегда определяете кросс-компиляцию во время настройки, а не в режиме времени. Если скрипт configure не знает, что вы выполняете кросс-компиляцию, он может получить неверные ответы, когда он исследует систему, которая ищет поддерживаемую и что не поддерживается.

Кросс-компиляция - это то, что нужно для настроек --build, --host и --target. Вам никогда не нужно устанавливать --build: он всегда относится к системе, на которой запущена настройка, и настройка может понять это для себя. Для нормальной кросс-компиляции вы также не устанавливаете -host, и вы должны установить --target для цели кросс-компиляции. Вам также может потребоваться установить CC (для программ C) и/или CXX (для программ на C++), LD, AR, STRIP и несколько других, если необходимо. Лично я предпочитаю, чтобы построить в отдельном каталоге, а также, хотя некоторые пакеты не поддерживают его, к сожалению):

tar xzf foo-1.1.tar.gz 
mkdir obj 
cd obj 
../foo-1.1/configure --target=... CC=...-gcc CXX=...-g++ ... 
make 

Примечания это все предусмотрено основным AUTOCONF/Automake, так что все проекты будут делать это так же, (хотя, по моему опыту, многие проекты, которые не делают попыток перекрестной компиляции несколько регулярно, делают что-то неправильно, так что это не работает так хорошо).

+1

+1, * кроме * согласно http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Specifying-Target-Triplets.html вы должны установить '- host', чтобы указать тип системы, на которой будет работать выход. '--target' только для того, когда сам вывод является кросс-компилятором. – mtrw

Смежные вопросы