Как написать configure.ac и Makefile.am для freeglut? - PullRequest
2 голосов
/ 22 сентября 2010

Я хочу использовать 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 ]

3 голосов
/ 19 января 2011

Исправление / добавление к ответу ptomato:

Коротко: на самом деле freeglut - это перенасыщение, так же:

AC_CHECK_LIB([glut], [glutInit])

Объяснение: freeglut - это замена более старых / несвободных реализаций OpenGL Utility Toolkit (GLUT). В современных дистрибутивах freeglut устанавливается в качестве замены для этих старых / несвободных установок GLUT. Это делается путем установки опции конфигурации --enable-replace-glut freeglut. В результате библиотека называется libglut вместо libfreeglut. Взгляните, например, на пакет Freeglut Ubuntu ; содержит /usr/lib/libglut.so.3.

И для поддержки более старых дистрибутивов, в которых freeglut устанавливается как libfreeglut вместо libglut, вам также необходимо проверить это.

1 голос
/ 24 сентября 2010

Pkg-config - это программа, которая ищет необходимые флаги компилятора и флаги компоновщика для библиотеки.PKG_CHECK_MODULES([NAME], [libraries]) - это макрос autoconf, который ищет флаги для libraries и помещает их в две переменные, NAME_CFLAGS и NAME_LIBS.Не все библиотеки поддерживают его.

Для поддержки pkg-config библиотеки должны установить файл .pc.Глядя на исходный код freeglut , кажется, что его нет, поэтому я пришел к выводу, что он не поддерживает pkg-config.

Что делать, если библиотека не поддерживает pkg-config, посмотрите в его документацию , чтобы узнать, упоминаются ли в ней какие-либо флаги компилятора и флаги компоновщика, которые вы должны использовать.Я нигде не могу найти упоминания об этом.

Поскольку это не помогает, следующая лучшая вещь - просто предположить, что библиотеке не нужны никакие дополнительные флаги компилятора и только один флаг компоновщика: -l<name>,в этом случае -lfreeglut.Вы также можете использовать макрос autoconf, чтобы проверить это автоматически.Вы можете добавить это к своему configure.ac следующим образом:

AC_CHECK_LIB([freeglut], [glutInit])

Это автоматически добавит -lfreeglut к LIBS, если библиотека freeglut присутствует, поэтому вам не нужно писать что-то дополнительное вваш Makefile.am.

0 голосов
/ 01 сентября 2012
    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])
...