由于fftw3 似乎安装了*.pc 文件,我将在configure.ac 中使用基于pkg-config 的宏,类似于
PKG_CHECK_MODULES([FFTW3], [fftw3])
或者,如果您想对编译您的库的人提供更多帮助,例如
PKG_CHECK_MODULES([FFTW3], [fftw3], [],
[AC_MSG_ERROR([fftw3 devel package not found])])
当然,这需要在autoreconf 和configure 时间安装pkg-config。
如果有人碰巧在不寻常的地方安装了fftw3,可以将*.pc文件的安装目录添加到PKG_CONFIG_PATH环境变量中。
在定义libfoo 库的Makefile.am 文件中,您可以添加类似的行
libfoo_CFLAGS += $(FFTW3_CFLAGS)
libfoo_LIBADD += $(FFTW3_LIBS)
如果您想及早发现那些试图在您的源代码上运行autoreconf 而没有安装pkg-config 的人,您可以在configure.ac 中添加一行以确保定义了PKG_CHECK_MODULES autoconf m4 宏:
m4_pattern_forbid([PKG_CHECK_MODULES])dnl
不过,这在野外很少见。
相对于内置的AC_CHECK_LIB & Co 宏的优势在于*.pc 文件可以定义更多信息。例如
[user@host ~]$ pkg-config --libs fftw3
-lfftw3
没有惊喜,但是
[user@host ~]$ pkg-config --libs fftw3q
-lfftw3q -lquadmath
可能包含令人惊讶的附加标志。分发包也可能在那里添加了系统特定信息。
恕我直言,当依赖项发送 *.pc 文件时,使用 PKG_CHECK_MDOULE 比使用 AC_CHECK_LIB 更可取。