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

时间:2010-09-22 13:05:25

标签: opengl makefile autotools freeglut pkg-config

我想在我的项目中使用freeglut。

在我的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,它看起来像这样:

INCLUDES = @SDL_CFLAGS@
LDADD = @SDL_LIBS@

3 个答案:

答案 0 :(得分:2)

纠正/增加ptomato的答案:

简短:实际上freeglut是过剩的,所以:

AC_CHECK_LIB([glut], [glutInit])

说明:freeglut是OpenGL Utility Toolkit(GLUT)的旧/不自由实现的替代品。在今天的发行版中,freeglut被安装为这些旧的/不自由的GLUT安装的替代品。这是通过设置freeglut的--enable-replace-glut配置选项来完成的。因此,该库名为libglut,而不是libfreeglut。看一下Ubuntu's freeglut package的例子;它包含/usr/lib/libglut.so.3

为了支持旧的发行版,将freeglut安装为libfreeglut而不是libglut,你也需要检查它。

答案 1 :(得分:1)

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])

如果freeglut库存在,这会自动将-lfreeglut添加到LIBS,因此您不必在Makefile.am中添加任何额外内容。

答案 2 :(得分:0)

    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])