makefile.am变量在make命令中的目标文件后设置一些libs

时间:2014-07-12 17:13:53

标签: makefile

我有一些使用clang库的代码。我想使用makefile.am和autotools来编译它。我的问题是在编译命令中,我的clang libs必须在对象文件之后,例如:

 clang++ $(CXXFLAGS) -o myprog myprog.o -lclanglibs1 -lclanglibs2

当我创建makefile.am时,我使用了:

 myprog_LDFLAGS = -lclanglibs1 -lclanglibs2

实际上导致了Makefile:

 clang++ $(CXXFLAGS) -lclanglibs1 -lclanglibs2 -o myprog myprog.o 

这不编译(这是clang libs的特殊性,如果我手动生成编译命令clang ++ $(CXXFLAGS)-o myprog myprog.o -lclanglibs1 -lclanglibs2,它可以工作)

我试图通过使用变量myprogram_LDADD来解决这个问题,但是我得到一个错误,因为autotools检测到它包含一些链接库和autotools说使用myprog_LDFLAGS。

如何设置clang库以使它们出现在编译命令的末尾?

编辑: 在我的makefile.am中,我得到了一些像这样的clang库:

 -lclanglibs1 -lclanglibs2 $(shell llvm-config --libs)

1 个答案:

答案 0 :(得分:1)

我找到了解决方案:

问题是如何用shell命令替换make。 这个变量:

 myprog_LDADD = $(shell llvm-config --libs)

不会被autotools和configure扩展,myprog_LDADD会被make扩展,检查内容并显示错误。

我必须从configure.ac获取libs:

AC_SUBST([LLVMLIBSLD],[$(llvm-config --libs )])

然后在myprog_LDADD中添加变量。

 myprog_LDADD=@LLVMLIBSLD@