我有一些使用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)
答案 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@