各种各样的开源项目都以源代码的形式分发,并且应该使用./configure && make
方法进行编译。但是如果我想交叉编译,我应该在这两个步骤中的哪一个告诉他们我想要获取二进制文件的目标平台?
它是否与一般的配置/制作有关,或者这是特定于每个项目的?编译某些项目、库或控制台应用程序并指定目标的示例可能是什么?
我知道许多项目在他们的网站上都有一个专门用于“交叉编译这个程序”的网页。所以它似乎是特定于项目的设置。但是项目仍然使用configure/make,那么这一切是什么关系呢?
各种各样的开源项目都以源代码的形式分发,并且应该使用./configure && make
方法进行编译。但是如果我想交叉编译,我应该在这两个步骤中的哪一个告诉他们我想要获取二进制文件的目标平台?
它是否与一般的配置/制作有关,或者这是特定于每个项目的?编译某些项目、库或控制台应用程序并指定目标的示例可能是什么?
我知道许多项目在他们的网站上都有一个专门用于“交叉编译这个程序”的网页。所以它似乎是特定于项目的设置。但是项目仍然使用configure/make,那么这一切是什么关系呢?
如果您的系统使用标准 GNU autoconf,那么您将始终在配置时定义交叉编译,而不是在生成时。如果配置脚本不知道您正在交叉编译,它可能会在探测系统以查找支持和不支持的内容时获得错误的答案。
交叉编译是要配置的 --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
请注意,这都是由基本的 autoconf / automake 提供的,因此所有项目都会以相同的方式进行(尽管根据我的经验,许多项目不会定期尝试交叉编译,但会做错事,以至于效果不佳) .