Eu não acho que haja alguma maneira de fazer isso de forma robusta puramente com variáveis ambientais. O problema com o uso de LIBRARY_PATH parece ser que qualquer opção -L tem precedência. Se, por alguma razão, o comando gcc tiver -L/usr/lib64 , isso será pesquisado primeiro e a versão mais antiga da biblioteca será encontrada. Aparentemente você vai alterar os Makefiles, você também deve ter cuidado para que um -L/usr/lib64 não apareça primeiro.
Olhando para a sua pergunta SO, não parece que o problema acima seja um problema. No entanto, há% trailing : desnecessário no valor da variável LIBRARY_PATH , o que pode explicar por que não funcionou.
Além disso, conforme observado na resposta à questão do SO, LD_LIBRARY_PATH é usado pelo vinculador dinâmico e só é relevante no runtime para o seu aplicativo. Isso pode ser usado se a localização das bibliotecas dinâmicas não puder ser encontrada quando o aplicativo for executado. O que é usado pelo vinculador GNU é LD_RUN_PATH , que essencialmente faz para -rpath o que LIBRARY_PATH faz para -rpath , exceto que especificar qualquer -rpath significa que LIBRARY_PATH será ignorado (e não apenas menor precedência).
O que você pode tentar então é:
LIBRARY_PATH=/opt/lib_name/X/lib LD_RUN_PATH=/opt/lib_name/X/lib make
Algo que pode ser mais robusto é criar um script de wrapper para gcc que inclua as opções necessárias, por exemplo:
#!/bin/sh
gcc -L/opt/lib_name/X/lib -Wl,-rpath,/opt/lib_name/X/lib "$@"
Nomeie o arquivo gcc , torne-o executável e coloque-o em um diretório sozinho (ou pelo menos um no qual não haja arquivos com o mesmo nome dos comandos vitais). Então você pode executar make como:
PATH=/path/to/script:$PATH make