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

Opengl 如何为freeglut编写configure.ac和Makefile.am?,opengl,makefile,autotools,freeglut,pkg-config,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中写入什么?对

我想在我的项目中使用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@
是一个为库查找必要的编译器标志和链接器标志的程序
PKG\u CHECK\u MODULES([NAME],[libraries])
是一个autoconf宏,用于查找
libraries
的标志,并将其放入两个变量
NAME\u CFLAGS
NAME\u LIBS
。并非所有库都支持它

为了支持pkg配置,库必须安装.pc文件。看看它似乎没有一个,所以我得出结论,它不支持pkg配置

当库不支持pkg config时,您应该做的是查看它是否提到您应该使用的任何编译器标志和链接器标志。我在任何地方都找不到这件事

既然这样做失败了,接下来最好的方法就是假设库不需要任何额外的编译器标志,只需要一个链接器标志:
-l
,在本例中是
-lfreeglut
。您还可以使用autoconf宏来自动检查这一点。您可以将其添加到
configure.ac
中,如下所示:

AC_CHECK_LIB([freeglut], [glutInit])

如果存在freeglut库,这将自动将
-lfreeglut
添加到
LIBS
,因此您不必在
Makefile.am

中写入任何额外内容。更正/添加ptomato的答案:

简而言之:实际上,自由过剩就是过剩,所以:

AC_CHECK_LIB([glut], [glutInit])
说明:freeglut是OpenGL实用工具工具包(GLUT)的旧版/非自由版实现的替代品。在今天的发行版中,freeglut是作为这些旧的/不自由的GLUT安装的替代品安装的。这是通过设置freeglut的
--启用替换glut
配置选项来实现的。因此,该库被称为
libglut
,而不是
libfreeglut
。例如,;它包含
/usr/lib/libglut.so.3


为了支持旧版本,即将freeglut安装为libfreeglut而不是libglut,您也需要检查它。

您需要freeglut还是GLUT?谢谢您的回复!虽然一个代码片段可以回答这个问题,但添加一些附加信息仍然很好,比如解释等等。。
    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])