替代gs的--sysroot开关?

时间:2010-06-04 19:31:00

标签: gcc path header

当您不希望标准路径中的标头/库影响您的构建时,--sysroot开关非常有用。

  

--sysroot=dir:使用dir作为标头和的逻辑根目录   库。例如,如果   编译器通常会搜索   / usr / include和库中的头文件   在/ usr / lib中,它将改为搜索   dir / usr / include和dir / usr / lib。 [ref]

可以通过使用环境变量, gcc specs 文件或任何其他不需要命令行开关的方法来完成同样的事情吗?

2 个答案:

答案 0 :(得分:8)

如果您可以使用环境变量,可以将-sysroot添加到CFLAGS。

答案 1 :(得分:3)

您可以围绕gcc创建一个包装器脚本,该脚本使用您希望的标志执行实际的gcc。这适用于与环境变量混淆的Makefile和复杂构建。您只需要确保您的gcc脚本在PATH中比实际的gcc二进制文件更早。脚本本身只有两行,

#!/bin/sh
exec /usr/bin/gcc --sysroot=/your/sysroot "$@"

如果$HOME/bin在PATH的早期,您可以将脚本放在$HOME/bin中,它不会影响任何其他用户。

如果您的configure脚本在gcc中明确查找/usr/bin/,则可能需要将/usr/bin/gcc重命名为/usr/bin/gcc.bin,并为您的脚本命名/usr/bin/gcc。这将影响所有用户。如果您需要此功能,但也希望它仅影响某些用户或用户,请使用

#!/bin/sh
[ "$(id -un)" -eq "theuser" ] && exec /usr/bin/gcc.bin --sysroot=/your/sysroot "$@"
exec /usr/bin/gcc.bin "$@"

你可以做变种,例如使用相同方案设置特定sysroot的特定用户帐户或组成员身份。