如何在Makefile.am中仅当动态库存在时才进行链接?
解决方案
你的写法无效是因为Makefile.am不支持直接嵌入shell条件语句,需要借助Autotools的配置检测机制实现条件链接,具体步骤如下:
1. 修改configure.ac添加检测逻辑
在configure.ac中加入对目标库的检测代码,提供两种可选方式:
方式一:仅检测文件物理存在
如果只需确认库文件存在,添加以下代码:
AC_CHECK_FILE([/usr/lib64/liba-3.2.so.1], [HAVE_LIBA=yes], [HAVE_LIBA=no]) AC_SUBST(HAVE_LIBA)
方式二:检测库的可用性(更可靠)
如果需要确保库能正常链接(避免文件存在但依赖缺失的情况),可通过AC_CHECK_LIB检测库中的某个导出函数(示例假设库中有a_init函数):
AC_CHECK_LIB([a], [a_init], [HAVE_LIBA=yes myprog_LDADD="/usr/lib64/liba-3.2.so.1"], [HAVE_LIBA=no]) AC_SUBST(myprog_LDADD)
2. 修改Makefile.am使用条件变量
根据configure.ac的检测结果,在Makefile.am中添加对应逻辑:
若使用方式一,添加:
if HAVE_LIBA myprog_LDADD += /usr/lib64/liba-3.2.so.1 endif
若使用方式二,直接引用已在configure阶段赋值的变量即可:
myprog_LDADD = @myprog_LDADD@
3. 重新生成配置文件
修改完成后,在项目根目录执行以下命令更新配置并编译:
autoreconf -vfi ./configure make
内容的提问来源于stack exchange,提问作者qwerty
相关产品推荐
相关产品推荐

