J'ai une application C Je convertis un ensemble de Makefiles codés à la main en GNU AutoMake. Il a un sous-répertoire qui contient un en-tête d'interface et plusieurs implémentations dépendant de la plate-forme. Actuellement, une implémentation est sélectionnée et construite dans un fichier objet avec un nom fixe dans ce répertoire. Le code qui utilise l'interface du pilote établit alors des liens avec ce fichier objet et obtient automagiquement le bon pilote.Fichiers d'objets intermédiaires explicites dans GNU AutoMake
Quelle est la meilleure façon de convertir ce système pour utiliser AutoTools? J'ai déjà AutoConf créer une substitution pour le fichier d'implémentation de pilote correct. Je n'arrive pas à comprendre comment obtenir une cible AutoMake dont je peux mettre les fichiers d'implémentation avec les variables EXTRA_*_SOURCES
et *_LDADD
. Ai-je juste besoin d'abandonner le fichier d'objet intermédiaire et de le mettre dans la liste pour la cible du programme qui utilise leur?
EDIT: Résolu grâce à ptomato. En raison de la résolution des dépendances d'Automake, toutes les sources possibles doivent être nommées dans *_SOURCES
et EXTRA_*_SOURCES
, comme expliqué dans the Conditional Sources section of the manual. Par conséquent, la strophe de la bibliothèque est en fait:
noinst_LIBRARIES = libdriver.a
libdriver_a_SOURCES = driver.h
EXTRA_libdriver_a_SOURCES = driver-linux.c driver-windows.c driver-osx.c
libdriver_a_LIBADD = @[email protected]
Je crois qu'il a été implémenté à l'origine de telle sorte que le fichier Makefile contrôlant la construction du pilote puisse se trouver dans le même répertoire que le code du pilote. Je ne suis pas sûr d'être d'accord avec cette philosophie, mais ce n'est pas mon projet, alors je m'en tiendrai là. –