2

这可能听起来像谷歌第一咨询 --help有点问题,但我两者都做了,但仍然确实得到了一个令人满意的答案。

i686想象以下场景:我的硬盘上有一个交叉编译的 RootFileSystem,位于/tftpboot/rfs. 我正在用我的 ARM 平台启动RFSNFS。我现在想编译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. 所以我想把它链接在那里
  • ???

所以我不得不承认我完全不知道我必须在哪里使用绝对路径以及我必须在哪里使用相对路径。还是我完全错了?

4

1 回答 1

1

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

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

否则,如果您想从编译它的不同位置运行它,那么技巧如下:

假设:

  • 您想从/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 hacking)。

于 2012-04-25T15:30:27.957 回答