Вы можете встроить строки в свой исполняемый файл для различных автоматически настраиваемых расположений, в которых вы, возможно, захотите посмотреть. Это более или менее то, что делают такие программы, как GCC.
Например, GCC 4.3.3 на моем компьютере был скомпилирован в / work5 / tmp и настроен для установки в /usr/gcc/v4.3.3, и он содержит (среди многих других) строки:
/usr/ccs/bin/
/usr/ccs/lib/
/usr/gcc/v4.3.3
/usr/gcc/v4.3.3/bin/
/usr/gcc/v4.3.3/lib
/usr/gcc/v4.3.3/lib/gcc/
/usr/gcc/v4.3.3/libexec/gcc/
/usr/gcc/v4.3.3/share/locale
/usr/gnu/include
/usr/include
/usr/include/iso
/usr/include/sys
/usr/lib/
/usr/lib/ld.so.1
/usr/libexec/gcc/
/usr/local/share/bison
/usr/tmp
/var/tmp
/var/tmp/
/work5/tmp/gcc-4.3.3-obj/./prev-gcc/include
/work5/tmp/gcc-4.3.3-obj/gcc
/work5/tmp/gcc-4.3.3-obj/intl
/work5/tmp/gcc-4.3.3-obj/libiberty
/work5/tmp/gcc-4.3.3-obj/sparc-sun-solaris2.10/libgcc
Комментарий гласит: «Это то, что я пытаюсь понять, как это сделать?»
Есть множество способов. Часть ответа - знать, какие имена вам нужны. Если вы посмотрите на вывод автоконфигурации, в make-файле есть такие имена, как prefixdir и pkglibdir. Вы можете добавить их в строки компилятора C:
DFLAG1 = -DPKGLIBDIR='"$(pkglibdir)"'
и добавьте DFLAG1 к своим CFLAGS. Повторите до тошноты ...
Код внутри вашей программы может выполнять следующие действия:
static const char *libdirs_to_search[] =
{
...
#ifdef PKGLIBDIR
PKGLIBDIR,
#endif /* PKGLIBDIR */
};
Более чистый способ сделать это - изменить сгенерированный файл config.h и код конфигурации так, чтобы интересующие вас каталоги определялись в файле config.h, а не в make-файле.