2012-04-20 1 views
2

Это может звучать как Google первого или консультации --help любопытного вопроса, но я как и до сих пор вмятина реально получить satisfing ответ.какова точная цель креста опции компиляции «--prefix»

Представьте себе следующую ситуацию: у меня есть кросс-скомпилированная RootFileSystem на моем i686 жестком диске под /tftpboot/rfs. Я загружаю этот RFS за NFS с моей ARM-платформой. Теперь я хотел бы компилировать libxml, sqlite и php в ARM-RFS, чтобы расширить уже установленный сервер thttpd. В моем понимании, --prefix определяет другое место для /, так что в моем случае мои конфиги должны быть, как показано ниже:

//libxml 

./configure --build=i686-linux --host=arm-926ejs-linux-gnueabi --prefix=/tftpboot/rfs 
make 
make install 


//sqlite 
./configure --build=i686-linux --host=arm-926ejs-linux-gnueabi --prefix=/tftpboot/rfs CFLAGS="-lpthread -lrt -Os -ldl" CPPFLAGS="-DSQLITe_THREADSAFE=1 -DSQLITE_TEMP_STORAGE=3" 
make 
make install 

//php 
./configure --build=i686-linux --host=arm-926ejs-linux-gnueabi --target=arm-926ejs-linux-gnueabi --prefix=/tftpboot/rfs 
    --with-thttpd=/usr/local/sbin --without-pear --with-pdo-sqlite=/usr/local --disable-all --enable-pdo 
    --with-sqlite3=/usr/local --with-config-file-path=/data --enable-libxml --with-libxml-dir=/usr/local 
make 
make install 

, потому что:

  • Я хочу установить в обычной rootfs иерархии, но в rootpoint в /tftpboot/rfs.
  • thttpd уже установлен в /tftpboot/rfs. поэтому я хочу связать его там
  • ???

поэтому я должен признать, что я абсолютно не знаю, где я должен принимать абсолютное значение и где мне приходится работать с относительными путями. Или я все это совершенно неправильно?

ответ

1

--prefix указывает, где устанавливать программы и где установленная программа должна искать свои файлы при ее запуске.

Если конкретный проект/программа не использует префикс во время выполнения (многие этого не делают), это просто место установки, и вы можете игнорировать следующее. Вы можете обычно сказать, если префикс используется скомпилированной программой, скрестив установленные двоичные файлы для имени каталога (попробуйте сделать экспериментальную установку в отличительном префиксе), но это может не сработать, если файлы имеют информацию об отладке.

В противном случае, если вы хотите, чтобы запустить его в другое место, что он был скомпилирован, то здесь трюк:

Предположения:

  • Вы хотите, чтобы запустить его из /usr/bin с точки зрения целевой системы.
  • Вы хотите установить его под /tftpboot/rfs/usr/bin в виде системы сборки.

Шаги:

./configure --prefix=/usr --build=i686-linux --host=arm-926ejs-linux-gnueabi 
make 
make DESTDIR=/tftpboot/rfs install 

Предупреждение: DESTDIR это условное название, но некоторые проекты могут выбрать что-то другое (или вообще ничего, в этом случае счастливым Makefile взлома).