何时/如何指定配置/制作目标

exe*_*ook 4 makefile configure cross-compiling

各种各样的开源项目都以源代码形式分发,并且应该使用./configure && make方法进行编译。但是,如果我想交叉编译,我应该在这两个步骤中的哪一步告诉他们我想要获取二进制文件的目标平台?

它是否与一般的配置/制作有关,或者这特定于每个项目?编译某些项目、库或控制台应用程序并指定目标的示例是什么?

我知道许多项目在其网站上都有一个专门用于“交叉编译此程序”的网页。所以这似乎是项目特定的设置。但项目仍然使用configure/make,那么这一切有什么关系呢?

Mad*_*ist 5

如果您的系统使用标准 GNU autoconf,那么您将始终在配置时而不是在 make 时定义交叉编译。如果配置脚本不知道您正在交叉编译,那么当它探测系统以查找支持的内容和不支持的内容时,它可能会获得不正确的答案。

交叉编译是配置的 --build、--host 和 --target 标志的用途。你永远不需要设置 --build:它总是指你正在运行configure的系统,并且configure可以自己解决这个问题。对于正常的交叉编译,您也不要设置--host,而是将--target设置为交叉编译目标。如果需要,您可能还需要设置 CC(对于 C 程序)和/或 CXX(对于 C++ 程序)、LD、AR、STRIP 和其他一些。就我个人而言,我也更喜欢在单独的目录中构建,尽管不幸的是有些软件包不支持它):

tar xzf foo-1.1.tar.gz
mkdir obj
cd obj
../foo-1.1/configure --target=... CC=...-gcc CXX=...-g++ ...
make
Run Code Online (Sandbox Code Playgroud)

请注意,这一切都是由基本的 autoconf / automake 提供的,因此所有项目都会以相同的方式执行此操作(尽管根据我的经验,许多项目不会定期尝试交叉编译,但会做一些错误的事情,从而使其无法正常工作) 。