交叉编译选项“--prefix”的确切目的是什么

时间:2012-04-20 09:47:39

标签: makefile arm cross-compiling prefix

这可能听起来像谷歌第一次咨询 - 帮助有点问题,但我做了两个并仍然得到了真正得到满意的答案。

想象一下以下场景:我在i686下的/tftpboot/rfs硬盘上有一个交叉编译的RootFileSystem。我使用我的AR​​M平台在RFS上启动此NFS。我现在想将libxmlsqlitephp编译到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层次结构中但位于/tftpboot/rfs的根点。
  • thttpd已安装在/tftpboot/rfs中。所以我想在那里链接
  • ???

所以我不得不承认,我完全不知道我必须采取绝对的方式以及我必须使用相对路径的地方。或者我是否完全错了?

1 个答案:

答案 0 :(得分:1)

--prefix告诉配置安装程序的位置,以及安装程序在运行时应查找其文件的位置。

如果某个特定项目/程序在运行时没有使用该前缀(很多则没有),那么它只是安装位置,您可以忽略以下内容。您可以通常通过greping已安装的目录名二进制文件来判断编译程序是否使用了前缀(尝试以独特的前缀进行实验性安装),但如果文件有,则可能无效调试信息。

否则,如果你想从你编译它的其他位置运行它,那么这就是诀窍:

假设:

  • 您希望在目标系统的视图中从/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黑客攻击)。