何时/如何指定configure/make目标

4

有大量的开源项目以源代码形式分发,需要使用./configure && make方法进行编译。但如果我想进行交叉编译,那么在这两个步骤中的哪一个步骤中应该告诉它们我想要得到二进制文件的目标平台?

这是否与一般的configure/make有关,还是每个项目都是特定的?能否举出编译某个项目、库或控制台应用程序并指定目标的示例?

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

1个回答

5
如果您的系统使用标准的GNU autoconf,则始终应在配置时间而非制作时间定义交叉编译。如果配置脚本不知道您正在进行交叉编译,则在探测支持项和不支持项时可能会得到错误答案。
交叉编译可以通过configure命令中的--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提供的,因此所有项目都会以相同的方式进行(尽管根据我的经验,许多不经常尝试交叉编译的项目会做错一些事情,以致它不能很好地工作)。

1
+1,除非根据http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Specifying-Target-Triplets.html的规定,您应该设置“--host”来指定输出将在其上运行的系统类型。“--target”仅用于输出本身是交叉编译器的情况。 - mtrw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接