Ответ 1
Если вы можете использовать переменные среды, вы можете добавить -sysroot в CFLAGS.
Переключатель --sysroot
полезен, если вы не хотите, чтобы заголовки/библиотеки стандартных путей влияли на вашу сборку.
--sysroot=dir
: используйте dir в качестве логического корневого каталога для заголовков и библиотеки. Например, если компилятор обычно ищет заголовки в /usr/include и библиотеки в /usr/lib, вместо этого будет искать dir/usr/include и dir/usr/lib. [ref]
Можно ли сделать то же самое с использованием переменных среды, файла спецификаций gcc или любых других методов, которые не требуют переключения командной строки?
Если вы можете использовать переменные среды, вы можете добавить -sysroot в CFLAGS.
Вы можете создать обертку script вокруг gcc, которая выполняет фактический gcc с необходимыми флагами. Это работает с Makefiles и сложными сборками, которые беспорядочны с переменными среды. Вам нужно только убедиться, что ваш gcc script ранее в PATH, чем фактический gcc файл. Сам script - это всего две строки,
#!/bin/sh
exec /usr/bin/gcc --sysroot=/your/sysroot "[email protected]"
и если $HOME/bin
на ранней стадии вашего PATH, вы можете поместить script в $HOME/bin
, и это не повлияет на других пользователей.
Если у вас есть configure
script, который явно ищет gcc
в /usr/bin/
, вам может потребоваться переименовать /usr/bin/gcc
в /usr/bin/gcc.bin
и назовите script /usr/bin/gcc
. Это затронет всех пользователей. Если вам это нужно, но также хотите, чтобы это повлияло только на определенных пользователей или пользователей, используйте
#!/bin/sh
[ "$(id -un)" -eq "theuser" ] && exec /usr/bin/gcc.bin --sysroot=/your/sysroot "[email protected]"
exec /usr/bin/gcc.bin "[email protected]"
Вы можете делать варианты, например. конкретных учетных записей пользователей или членства в группах для установки определенного sysroot, используя ту же схему.