当您不希望标准路径中的标头/库影响您的构建时,--sysroot
开关非常有用。
--sysroot=dir
:使用dir作为标头和的逻辑根目录 库。例如,如果 编译器通常会搜索 / usr / include和库中的头文件 在/ usr / lib中,它将改为搜索 dir / usr / include和dir / usr / lib。 [ref]
可以通过使用环境变量, gcc specs 文件或任何其他不需要命令行开关的方法来完成同样的事情吗?
答案 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的特定用户帐户或组成员身份。