makefile.am 变量在 make 命令中的目标文件之后设置一些库
Posted
技术标签:
【中文标题】makefile.am 变量在 make 命令中的目标文件之后设置一些库【英文标题】:makefile.am variable to set some libs after object files in make command 【发布时间】:2014-07-12 17:13:53 【问题描述】:我有一些使用 clang 库的代码。我想使用 makefile.am 和 autotools 来编译它。我的问题是,在编译命令中,我的 clang 库必须在对象文件之后,例如:
clang++ $(CXXFLAGS) -o myprog myprog.o -lclanglibs1 -lclanglibs2
当我创建我的 makefile.am 时,我使用过:
myprog_LDFLAGS = -lclanglibs1 -lclanglibs2
这实际上导致了 Makefile:
clang++ $(CXXFLAGS) -lclanglibs1 -lclanglibs2 -o myprog myprog.o
而且这不能编译(这是 clang 库的特殊性,如果我手动生成编译命令 clang++ $(CXXFLAGS) -o myprog myprog.o -lclanglibs1 -lclanglibs2,它可以工作)
我试图通过使用变量 myprogram_LDADD 来解决这个问题,但我得到了一个错误,因为自动工具检测到我它包含一些链接库并且自动工具说要使用 myprog_LDFLAGS。
如何设置 clang 库,使其出现在编译命令的末尾?
编辑: 在我的 makefile.am 中,我得到了一些像这样的 clang 库:
-lclanglibs1 -lclanglibs2 $(shell llvm-config --libs)
【问题讨论】:
您收到错误或警告吗?如果它是警告,您可以忽略它,因为它只是一个建议,而不是要求。文档指出“'PROG_LDADD' 不适用于传递特定于程序的链接器标志('-l'、'-L'、'-dlopen' 和 '-dlreopen' 除外)。”据此,在这种情况下,您可以使用 myprog_LDADD 而不是 myprog_LDFLAGS。 是的,我有一条错误消息,它是链接器标志,例如 '--libs)' 属于 'myprog_LDFLAGS' 我已经更新了我的问题的描述 【参考方案1】:我找到了解决办法:
问题是如何使用 shell 命令进行 make 替换。 这个变量:
myprog_LDADD = $(shell llvm-config --libs)
不是由autotools和configure扩展的,myprog_LDADD是由make扩展的,检查内容并显示错误。
我必须像这样从 configure.ac 获取库:
AC_SUBST([LLVMLIBSLD],[$(llvm-config --libs )])
然后在 myprog_LDADD 中添加变量。
myprog_LDADD=@LLVMLIBSLD@
【讨论】:
以上是关于makefile.am 变量在 make 命令中的目标文件之后设置一些库的主要内容,如果未能解决你的问题,请参考以下文章