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 命令中的目标文件之后设置一些库的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Makefile.am 中调整 PATH 变量?

关于Makefile.am中与Build相关的变量设置 AM_CPPFLAGS

automake:编译器选项的顺序阻碍了 make

`make check` 在 VPATH 中失败

如何在任何make文件中添加标志

如何将预单元测试步骤添加到我的*** Makefile.am?