2010-01-15 4 views
1

J'ai un programme main.c qui appelle header.c avec l'aide de header.h dans son programme. Je sais comment le compiler dans GCC mais maintenant je voudrais utiliser autotools pour cela. Je voudrais savoir ce qui devrait être écrit dans Makefile.am pour compiler main.c?autotools pour 2 programmes

donc par exemple si j'ai deux fichiers c main.c et header.c comme indiqué ci-dessous

main.c: -

#include<stdio.h> 
#include"header.h" 
int main(int argc, char* argv[]) 
{ 

    printf("\n Hello"); 
    function1(); 

    return 0; 
} 

et mon fichier contient header.c

#include<stdio.h> 
void function1() 
{ 
    printf("\n Hi"); 
} 

donc mon fichier header.h contiendra

void function1(); 

alors dans ce cas ce qui doit être écrit dans le makefile.am et configure.ac

Répondre

0

Une Makefile.am minimale:

SHELL = /bin/sh 

prefix = /usr/local 
exec_prefix = @[email protected] 
bindir = ${exec_prefix}/bin 

AM_CFLAGS = -I./ 

bin_PROGRAMS = your_program_name 

niue_SOURCES = main.c 


install-exec-local: 
    cp ./your_program_name ${bindir} 

uninstall-local: 
    rm ${bindir}/your_program_name 

Vous devrez peut-être un configure.ac ainsi:

# Process this file with autoconf to produce a configure script. 

AC_PREREQ(2.59) 
AC_INIT(your_program_name, 0.1, [email protected]) 
AM_INIT_AUTOMAKE 
AC_CONFIG_SRCDIR([main.c]) 
AC_CONFIG_HEADER([config.h]) 

# Checks for programs. 
AC_PROG_CC 

# Checks for additional libraries. 
# AC_CHECK_LIB([pthread], [pthread_create]) 

# Checks for additional header files. 
# AC_CHECK_HEADERS([getopt.h]) 

# Checks for typedefs, structures, and compiler characteristics. 
AC_HEADER_STDBOOL 
AC_C_CONST 
AC_TYPE_SIZE_T 
AC_HEADER_TIME 
AC_C_VOLATILE 

# Checks for library functions. 
AC_HEADER_STDC 
AC_FUNC_SELECT_ARGTYPES 
#AC_CHECK_FUNCS([getopt_long]) 

AC_CONFIG_FILES([Makefile]) 
AC_OUTPUT 
4

Voici un exemple minimal de ce dont vous avez besoin pour la situation que vous décrivez.

Vous avez besoin d'un makefile.am contenant le nom du binaire pour construire, et les fichiers sources utilisés pour le construire (vous n'avez pas à la liste des fichiers d'en-tête, ils seront automatiquement détectés):

bin_PROGRAMS = example 
example_SOURCES = main.c header.c 

Et vous avez besoin d'un configure.ac. Ici, vous configurez le nom et le numéro de version du programme, initialisez Automake avec l'argument foreign afin qu'il ne vous blâme pas sur les fichiers manquants dont le projet GNU a besoin, dites-lui que vous avez besoin d'un compilateur C, dites-lui de construire votre Makefile, et enfin lui dire de sortir les résultats de la configuration précédente.

AC_INIT([example], [1.0]) 
AM_INIT_AUTOMAKE([foreign]) 
AC_PROG_CC 
AC_CONFIG_FILES([Makefile]) 
AC_OUTPUT 

Si votre programme existant a toutes sortes de dépendances de bibliothèque, vous pouvez exécuter autoscan pour détecter les dépendances possibles. Il produit un fichier configure.scan, qui contient un modèle qui peut être utilisé pour construire votre ; mais si votre programme est simple, vous pouvez passer cette étape et utiliser l'exemple minimal ci-dessus.

Exécutez maintenant autoreconf --install pour copier dans certains fichiers nécessaires et générer Makefile.in et configure à partir des fichiers de configuration ci-dessus. Ensuite, exécutez ./configure pour configurer votre script, en générant un Makefile. Enfin, exécutez make pour créer votre programme.

Une fois que vous avez fait ces étapes, la Makefile que vous avez généré détecte des changements à votre makefile.am et exécuter les étapes à nouveau, à partir de maintenant, vous devriez être en mesure d'exécuter juste make sans avoir à passer par toutes ces étapes encore. Pour plus d'informations, consultez les manuels Automake et Autoconf pour plus d'informations. Par exemple, si j'ai deux fichiers c main.c et en-tête.

0

c comme indiqué ci-

main.c: -

comprennent

comprennent "header.h"

int main (int argc, char * argv []) {

printf ("\ n Bonjour"); function1();

return 0; }

et mon fichier contient header.c

comprennent

function1 void() { printf ("de \ n Salut"); }

donc mon fichier header.h contiendra void function1();

alors dans ce cas ce qui doit être écrit dans le makefile.am et configure.ac

+1

Salut, Jinal. Vous semblez être nouveau ici, alors je vais vous donner quelques conseils sur la façon d'utiliser le site. Une clarification comme celle-ci devrait être faite comme une modification à votre question originale, pas comme une réponse à votre propre question. Regardez en bas à gauche de votre question. vous devriez voir un petit lien «modifier» sur lequel vous pouvez cliquer, puis éditer votre question pour fournir des éclaircissements. En outre, tout code source doit être indenté de 4 espaces; Cela entraînera le formatage du code source et ne sera pas interprété comme du texte stylé. Vous pouvez sélectionner un bloc entier de code et appuyer sur le bouton '101010' pour le mettre en retrait. –

+0

J'ai déjà fait le montage pour vous; Les utilisateurs expérimentés peuvent éditer les questions et réponses d'autres personnes pour aider à résoudre des problèmes de ce genre. Si vous ne pensez pas que votre question a reçu une réponse adéquate, vous pouvez également répondre aux personnes qui ont répondu en sachant pourquoi leurs réponses ne sont pas suffisantes ou ne fonctionnent pas pour vous. La réponse que j'ai fournie devrait fonctionner pour la situation exacte que vous décrivez ici (je l'ai même testée avec un exemple de projet), cela m'aiderait à mieux vous répondre si vous pouviez me dire quelle partie ne fonctionne pas pour vous, ou où ma réponse n'est pas claire. –

Questions connexes