[automake] <prog>_LIBS et <prog>_CFLAGS pas pris en compte

Bonjour à tous,

J’ai un petit problème avec automake/autoconf,
et je me disais qu’il devait bien y avoir quelques devs chevronnés sur le forum qui ont eu le même problème que moi :wink:

J’ai commencé à écrire un petit programme (simpled) en C++ dont le but est de manipuler le C++, gtkmm et autoconf.
Les choses se passent assez bien jusqu’au moment où j’ai besoin d’avoir les headers et les libs de gtkmm.
Je met un PKG_CHECK_MODULES([simpled], [gtkmm-2.4 >= 2.8 libglademm-2.4 >= 2.6]) dans le configure.ac,
je refait tourner automake qui me crée bien les variables simpled_LIBS et simpled_CFLAGS dans Makefile.in. Mais ces variables ne sont jamais utilisées !

Pour corriger ça j’ai mis les lignes suivantes dans le Makefile.in :

simpled$(EXEEXT): LIBS += $(simpled_LIBS) $(simpled_OBJECTS): CXXFLAGS += $(simpled_CFLAGS)

Mais je sens bien que rajouter ça à la main n’est pas la méthode “officielle”,
je pense que ça devrait être mis en place par automake,
aussi si quelqu’un sait quelle est la manière de “bien” faire, je suis preneur :smiley:.

Pour info, voilà le contenu de quelques fichiers clés :
configure.ac

[code]# -- Autoconf --

Process this file with autoconf to produce a configure script.

AC_PREREQ(2.61)
AC_INIT([BBTs Simple Editor], [0.1], [bXbXtX@gmail.com], [simpled])
#AM_INIT_AUTOMAKE([-Wall -Werror foreign])
#AM_MAINTAINER_MODE
AM_INIT_AUTOMAKE([hello], [1.0])
AC_CONFIG_SRCDIR([src/simpled.cc])
AC_CONFIG_HEADER([config.h])
AC_CONFIG_FILES([
Makefile
src/Makefile
])

Checks for programs.

AC_PROG_CXX

Checks for libraries.

PKG_CHECK_MODULES([simpled],
[gtkmm-2.4 >= 2.8 libglademm-2.4 >= 2.6])

Checks for header files.

AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h])

Checks for typedefs, structures, and compiler characteristics.

Checks for library functions.

AC_OUTPUT[/code]
Makefile.am

SUBDIRS = src dist_doc_DATA = README
src/Makefile.am

bin_PROGRAMS = simpled simpled_SOURCES = simpled.cc

Pour info j’utilise autoconf 2.61-8 et automake 1:1.10.1-3.

Bonsoir

Ce ne serait pas cette ligne avec le programme hello, la source d’erreur

ça pourrait fonctionner avec ça

AM_INIT_AUTOMAKE([simpled], [1.0])

sinon garde la ligne par défaut

AM_INIT_AUTOMAKE([-Wall -Werror foreign])

Merci de ta réponse Iann.

Bien vu pour le hello, j’ai corrigé :slightly_smiling:.
J’ai aussi testé la ligne du AM_INIT_AUTOMAKE que tu proposais,
mais aucune des deux solution ne change quoi que ce soit.

Je vais sûrement essayer de trouver un package à décortiquer pour avoir sous les yeux un exemple qui marche ce week-end, mais toute suggestion est la bienvenue :wink:

et si tu mets ça dans le src/Makefile.am ?

bin_PROGRAMS = simpled simpled_SOURCES = simpled.cc simpled_LDADD = $(simpled_LIBS) AM_CPPFLAGS = $(simpled_CFLAGS) simpled_CXXFLAGS= -s

Merci Iann ta solution est bien plus propre que la mienne,
je peux regénérer le configure et autre Makefile.in sans soucis maintenant

merci :slightly_smiling:

Je vais quand même fouiller un peu pour voir si il n’y a pas des directives plus explicite avec automake que de forwarder les flags comme ça (et puis du coup tout les fichiers objets compilés auront les CFLAGS de simpled, mais bon, là ça devient du détail)

Tiens moi au courant si tu trouves quelque chose de mieux

C’est toujours un peu la galère les autotools mais une fois en place c’est génial

A+

OK, je posterai mes trouvailles dans ce topic :wink:

Visiblement on peut mettre des règles de Makefile directement dans le Makefile.am,
donc pour que les CFLAGS de simpled ne soient appliqués que sur simpled
ça donne ça :
src/Makefile.am

[code]bin_PROGRAMS = simpled
simpled_SOURCES = simpled.cc hello.cc hello.hh
simpled_LDADD = $(simpled_LIBS)

$(simpled_OBJECTS): AM_CPPFLAGS += $(simpled_CFLAGS)[/code]

@Iann J’ai regardé quelques packages et c’est quasiment toujours fait de la manière que tu proposes. Je vais regarder les directives valides de automake plus en détail, mais je commence à croire qu’automake ne me fera pas le café, faut le faire soit même :mrgreen:

Oh, et quelqu’un sait si mettre la construction ": = " est portable ?