为交叉编译配置“--prefix”选项

configure "--prefix" option for cross compiling

交叉编译时,--prefix选项应该传递哪个路径:我应该指定构建机器上的路径还是目标平台上的路径?

假设我将代码构建到 /home/me/arm/build/target_fs/usr,然后我将文件复制到我的目标平台,它们将位于 /usr。我应该使用 --prefix=/home/me/arm/build/target_fs/usr 还是只使用 --prefix=/usr 然后 make install DESTDIR=/home/me/arm/build/target_fs

我认为 --prefix 不是构建路径而是 运行 环境的路径(即目标平台上的路径)。答案 here makes me think that I'm right. But there are many pages out there (for example, Cross-compiling FFmpeg for Raspbian--prefix=/my/path/were/i/keep/built/) 人们在 --prefix 的构建机器上使用路径。所以我很困惑。

如您所见:

--prefix=dirname Specify the toplevel installation directory. This is the recommended way to install the tools into a directory other than the default. The toplevel installation directory defaults to /usr/local.

据我了解,您正在尝试为某个目标编译编译器。

在这种情况下,prefix 将在 build 机器上的 make install 命令后安装编译器时指定目录。之后你可以在那里带一个编译器。

. Should I use --prefix=/home/me/arm/build/target_fs/usr or just --prefix=/usr and then make install DESTDIR=/home/me/arm/build/target_fs?

在你的情况下 prefix 命令没有任何意义。因为你是手工复制二进制文件。

您还可以在 GCC 官方网站上找到所有其他信息: https://gcc.gnu.org/install/finalinstall.html

是的,你没看错,--prefix 是工作环境的路径。只需使用 --prefix=/usr。您可以通过在 DESTDIR 中安装来检查 make install 命令将在哪个文件夹路径中安装您的二进制文件。例如,如果您使用 --prefix=/usrmake install DESTDIR=/home/me/arm/build/target_fs,那么二进制文件将安装在文件夹 /home/me/arm/build/target_fs/usr。如果您只是 运行 make install,那么二进制文件将安装在您的前缀中,即“/usr”中。

当您进行交叉编译时,我认为您使用哪个前缀并不重要,因为无论如何您将安装在 DESTDIR 中,然后手动将二进制文件复制到您的目标。