这可能听起来像谷歌第一次或咨询 - 帮助有点问题,但我做了两个并仍然得到了真正得到满意的答案。
想象一下以下场景:我在i686
下的/tftpboot/rfs
硬盘上有一个交叉编译的RootFileSystem。我使用我的ARM平台在RFS
上启动此NFS
。我现在想将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
层次结构中但位于/tftpboot/rfs
的根点。thttpd
已安装在/tftpboot/rfs
中。所以我想在那里链接所以我不得不承认,我完全不知道我必须采取绝对的方式以及我必须使用相对路径的地方。或者我是否完全错了?
答案 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黑客攻击)。