您可以为您可能想要查看的各种自动配置位置将字符串构建到可执行文件中。这或多或少是 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
一条评论说:“这就是我想弄清楚该怎么做?”
有很多方法。部分答案是知道您需要哪些名称。如果查看自动配置输出,makefile 中有诸如 prefixdir 和 pkglibdir 之类的名称。您可以将它们添加到 C 编译器行:
DFLAG1 = -DPKGLIBDIR='"$(pkglibdir)"'
并将 DFLAG1 添加到您的 CFLAGS。重复恶心...
然后,程序中的代码可以执行以下操作:
static const char *libdirs_to_search[] =
{
...
#ifdef PKGLIBDIR
PKGLIBDIR,
#endif /* PKGLIBDIR */
};
更简洁的方法是修改生成的 config.h 文件和配置代码,以便您感兴趣的目录定义在 config.h 文件中,而不是在 makefile 中。