如何为freeglut编写configure.ac和Makefile.am?

问题描述:

我想为我的项目使用freeglut。如何为freeglut编写configure.ac和Makefile.am?

在我的configure.ac中,它看起来像这样,SDL的工作方式就像这样,所以我只是替换了一些药水,希望它可以用于freeglut,但它不会。那么我做错了什么?

# Check for freeglut 
PKG_CHECK_MODULES([FREEGLUT], [freeglut >= 3.0]) 
AC_SUBST(FREEGLUT_CFLAGS) 
AC_SUBST(FREEGLUT_LIBS) 

此外,我还有什么要写入Makefile.am?对于SDL它看起来像这样:

+0

你需要FreeGLUT还是GLUT? – genpfault 2010-09-22 13:49:03

Pkg-config是一个程序,查找需要的编译器标志和链接标志的图书馆。 PKG_CHECK_MODULES([NAME], [libraries])是一个autoconf宏,它查找libraries的标志并将它们放入两个变量NAME_CFLAGSNAME_LIBS中。并非所有的库都支持它。

为了支持pkg-config,库必须安装.pc文件。看着freeglut's source code似乎没有一个,所以我认为它不支持pkg-config。

当一个库不支持pkg-config时你应该怎么做,看看its documentation看它是否提到你应该使用的任何编译器标志和链接器标志。我无法在任何地方找到这一点。

由于失败,下一个最好的事情就是假设库不需要任何额外的编译器标志,并且只有一个链接器标志:-l<name>,在这种情况下为-lfreeglut。您也可以使用autoconf宏自动为您检查。你可以像这样添加到您的configure.ac

AC_CHECK_LIB([freeglut], [glutInit]) 

这将自动添加到-lfreeglut如果LIBS的freeglut图书馆存在,所以你不应该写任何额外的东西在你的Makefile.am

校正/增加ptomato的回答是:

短:在现实中freeglut是供过于求,所以做:

​​

说明:freeglut是针对OpenGL实用工具的较旧的/不*的实现替换( GLUT)。在今天的发行版中,freeglut可作为这些老旧/不*的GLUT安装的替代品安装。这是通过设置freeglut的--enable-replace-glut配置选项完成的。结果库被称为libglut而不是libfreeglut。看看例如Ubuntu's freeglut package;它包含/usr/lib/libglut.so.3

为了支持较早的发行版,它将freeglut安装为libfreeglut而不是libglut,您还需要检查它。

dnl Check for GLUT 
GLUT_CFLAGS="" 
GLUT_LIBS=-lglut 
glut_enabled=yes 
AC_ARG_WITH([glut], 
    [AS_HELP_STRING([--with-glut=DIR], 
      [glut install directory])], 
    [GLUT_CFLAGS="-I$withval/include" 
    GLUT_LIBS="-L$withval/lib -lglut"]) 
AC_CHECK_HEADER([GL/glut.h], 
     [], 
     [glut_enabled=no]) 
AC_CHECK_LIB([glut], 
     [glutInit], 
     [], 
     [glut_enabled=no]) 
+0

感谢您发表一个答案!虽然代码片段可以回答这个问题,但添加一些附加信息仍然很棒,比如解释等。 – j0k 2012-09-25 18:08:12