--sysroot
开关在您不希望标准路径中的头文件/库影响您的构建时非常有用。
是否可以通过使用环境变量、gcc specs文件或任何其他不需要命令行开关的方法来实现相同的效果?
--sysroot=dir
:将dir作为头文件和库的逻辑根目录。例如,如果编译器通常在/usr/include中搜索头文件并在/usr/lib中搜索库,则它将改为搜索dir/usr/include和dir/usr/lib。[ref]
如果你可以使用环境变量,你可以将--sysroot添加到CFLAGS中。
您可以创建一个围绕着gcc的包装脚本,使其使用您想要的标志来执行实际的gcc。这适用于Makefiles和涉及环境变量的复杂构建。您只需要确保您的gcc脚本在PATH中比实际的gcc二进制文件更早即可。该脚本本身只需两行代码,
#!/bin/sh
exec /usr/bin/gcc --sysroot=/your/sysroot "$@"
如果$HOME/bin
在您的PATH路径中排在前面,您可以将脚本放在$HOME/bin
文件夹中,这样不会影响其他用户。
如果你有一个特意寻找/usr/bin/
内的gcc
的configure
脚本,你可能需要将/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。
util/autogen.sh
,它会增加一个新的--with-sysroot=DIR
配置选项。看起来只传递给了libtool。添加--with-cflags-sysroot
配置选项(每个configure.ac
大约30行)似乎可以解决问题。你想尝试一下这个补丁吗?整个项目似乎已经过时了,在我的开发机上它在尝试编译第一个文件(util/src/platforms/unix/uuid_gen_unix.c
)时失败了。 - Nominal Animal