2011-08-08 33 views
0

我正在开发一个多平台C程序。由于每台机器上都有不同的编译器,库位置等,makefile变得相当复杂。我认为Autoconf/Automake是一个很好的解决方案,尽管我以前使用这些工具的经验很少。我是否真的需要指定库位置与automake链接?

我的Makefile.am的行为LIBS=-lX11,但链接失败,并显示错误"/usr/bin/ld: cannot find -lX11"。我可以通过将"-L/usr/X11R6/lib/"添加到LIBS的定义中来解决此问题,但是我应该确实需要这么做吗?当我运行./configure,它说:

checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include

所以它看起来像Automake的应该知道在哪里可以找到它。有没有办法可以在Makefile.am中引用它的位置,而不必对其进行硬编码,因为X11 libs将位于每台机器上的不同位置?

回答

1

你的Makefile.am不应该设置LIBS。如果你需要链接库,configure.ac应该包含对库的检查,配置脚本会相应地设置LIBS。另外,Makefile.am不应该指定库的路径。应该配置每个系统,以便预编译器可以找到标题并且链接器可以找到这些库。如果未设置系统以便链接程序可以找到库,则正确的解决方案是让用户在LDFLAGS中指定位置,而不是在Makefile.am中对某些内容进行硬编码。 (例如,不要将-L/p/a/t/h添加到Makefile中,您应该将LDFLAGS = -L/p/a/t/h添加到configure调用中。)

+0

感谢提示。我在那里有AC_CHECK_LIB(X11,XOpenDisplay),但是当它不能编译时,我试图通过changings LIBS来修复它。事实证明,我忽略了./configure说它无法在X11库中找到XOpenDisplay函数。这可能是真正的问题。 – Tom

相关问题