Avec autoconf/automake, comment dois-je préciser les chemins de fichiers?
Disons que je veux générer le makefile en passer un en-tête spécifique des chemins de g++.
De quoi ai-je besoin d'ajouter à configurer.ac ou Makefile.suis de préciser cela?
(remarque: je ne veux pas le faire passer dans le CPPFLAGS ./configurer. Je veux que ceux des chemins de boulangerie en avant cette étape)
EDIT:
Plus précisément, je veux inclure disons que /usr/include/freetype et /mypath/include.
J'ai mis AC_CHECK_HEADERS([freetype/config/ftheader.h]) et ça passe, mais ne semble pas à l'ajouter à l'-je passé à g++.
J'ai fait aussi essayer d'ajouter CPPFLAGS=-I.:/usr/include/freetype:/mypath/include, mais il baise vers le haut et met -j'ai deux fois, la première comme -I. et il ignore la 2ème I.
./configure
est l'étape qui détermine où les choses sont sur le système sur lequel vous êtes en train de compiler, donc c'est aussi l'étape qui permet la compilation de l'utilisateur pour lui indiquer où emplacements par défaut de l'en-tête chemins sont.CPPFLAGS n'est pas un colon liste séparée. Vous souhaitez CPPFLAGS='-I/usr/include/freetype -I/mypath/include'
OriginalL'auteur marathon | 2011-09-19
Vous devez vous connecter pour publier un commentaire.
Le codage en dur des chemins dans les fichiers de package est absolument la bonne chose à faire. Si vous choisissez de le faire, alors vous devez être conscient que vous ne respectez pas les règles de base de construction d'un paquet avec les autotools. Si vous spécifiez
/mypath/include
dans vos fichiers de package, vous spécifiez les choses spécifiques à votre machine dans un paquet qui est prévu pour fonctionner sur toutes les machines; il est évident que c'est faux. Il ressemble à ce que vous voulez pour votre paquet (lors de la construction de votre machine) pour rechercher des fichiers d'en-tête dans/mypath
. C'est facile à réaliser sans bastardizing votre colis. Il y a (au moins) 3 façons de le faire:Utiliser une config.site fichier. Dans
/usr/local/share/config.site
(créer ce fichier si nécessaire), ajouter la ligne:Maintenant un paquet à l'aide d'un autoconf généré script configure avec le préfixe par défaut (
/usr/local
) ajoutera-I/mypath/include
àCPPFLAGS
et les en-têtes dans/mypath/include
.Si vous voulez que la cession soit faite pour toutes les versions (et pas seulement ceux à être installé dans
/usr/local
), vous pouvez utiliser ceci:Mettre la même ligne spécifiant
CPPFLAGS
dans$HOME/config.site
, et de définirCONFIG_SITE=$HOME/config.site
dans l'environnement de votre shell par défaut. Maintenant, chaque fois que vous exécutez une autoconf généré script de configuration, les assignations de$HOME/config.site
sera fait.Il suffit de préciser
CPPFLAGS
dans l'environnement de votre shell par défaut.Toutes ces solutions ont deux principaux avantages par rapport à la modification de vos fichiers de build. Tout d'abord, ils travailleront pour tous autoconf paquets produits (tant qu'ils respectent les règles et ne pas faire des choses comme assigner un utilisateur à des variables telles que
CPPFLAGS
dans les fichiers de build). Deuxièmement, ils ne placez pas votre machine des informations spécifiques dans un ensemble qui devrait fonctionner sur toutes les machines.Si le paquet est construit à l'aide d'automake, les règles par défaut doivent avoir
$(CFLAGS)
et$(CPPFLAGS)
dans les endroits appropriés. Si elle ne le fait pas, le mainteneur du paquet est sérieusement abuser de automake. Peut-être que le paquet que vous êtes à la recherche utilise écrite à la mainMakefile.in
.OriginalL'auteur William Pursell
Puisque la question était de savoir quoi mettre dans un automakefile, j'aurais pensé que
AM_CPPFLAGS
était la bonne variable à utiliser pour ajouter inclut et définit pour tous les C/C++ compile. Voir http://www.gnu.org/software/automake/manual/html_node/Program-Variables.htmlExemple:
OriginalL'auteur dajobe