Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme d'apparition de fichier gnco

Creation d'un script shell qui génère Makefile a partir d'un config

    24 juin 2020 à 19:32:10

    Bonsoir les amis excuser moi de vous deranger mais j'ai un probleme sur la sortie de mon shell concernant l'appation de fichier gnco qui n'etant pas là a l'origin dans le dossier zip pour lequelle je genere le makefile m'inquiete a me demander ou j'ai fait l'erreur dans mon script je l'ai fait en piochant un peux partout du code que j'ai refait pour l'adapter a mon projet avec des commentaires dessus pour mieux comprendre aider moi pour qu'il y ai pas de fichier gnco apparu apres execution s'il vous plait.Merci pour l'aide d'avance

    Voici ce que je devais avoir comme liste si j'execute mon script mais des calc.gnco et main.gnco apparaisse sans raison je crois.

    ./automakefile fakeProj/config && ls fakeProj/
    calc.c
    main.c
    config
    Makefile

    Voici mon code commenter pour faciliter la lecture

    script=$0
    
    if [ $# != 1 ]
    then
        printf '%s: %s\n' $0, "invalid argument."
        exit 84
    else
        config=$1
    fi
    
    # Obtenez une valeur de la configuration
    function get_value()
    
    {
        local key="${1};"
        local necessary=$2
        local key_length=$((${#key} + 1))
        value=$(cat $config | grep ^$key | cut -c$key_length-)
        if [ -z "$value" ] && [ $necessary == true ]
        then
    	printf '%s: cannot find key %s\n' $script $key
    	exit 84
        fi
    }
    
    #Créer un fichier Makefile
    get_value "PROJECT_DIR" true
    makefile="${value}/Makefile"
    rm -rf $makefile
    
    # Écrivez une variable
    function write_variable()
    {
        get_value $2 $3
        echo -e "${1}\t=\t${value}\n" >> $makefile
    }
    
    #Écrire la ligne du compilateur
    write_variable "CC" "CC" true #Écrire le nom du programme
    write_variable "NAME" "EXEC" true #Ecriture de la suppression de macro
    echo -e "RM\t=\trm -f" >> $makefile
    
    #Ecrits le cflags
    get_value "HEADERS_DIR" false
    if [ -z $value ]
    then
        value="."
    fi
    headers=$value
    
    get_value "CFLAGS" false
    echo -e "\nCFLAGS\t=\t${value} -I${headers}" >> $makefile
    
    #Ecris le ldlags
    get_value "LIBS_DIR" false
    if [ -z $value ]
    then
        value="."
    fi
    libs=$value
    
    #Ecris le fichier source
    get_value "SOURCES_DIR" false
    if [ -z $value ]
    then
        value="."
    fi
    
    src="\nSRCS\t= \t\0134\n"
    
    while IFS='' read -r line || [[ -n "$line" ]]
    do
        files=(${line//;/ })
        if [ ${files[0]: -2} == '.c' ]
        then
            src+="\t\t${value}/${files[0]} \0134\n"
        fi
    done < "$config"
    echo -e $src >> $makefile
    
    #Ecrit un objet macro
    echo -e "\nOBJS\t=\t\$(SRCS:.c=.o)" >> $makefile
    
    #Ecris la commande: all
    echo -e "all:\t\$(NAME)" >> $makefile
    echo -e "\n\$(NAME): \$(OBJS)" >> $makefile
    echo -e "\t\$(CC) \$(OBJS) -o \$(NAME) \$(CFLAGS)" >> $makefile
    
    #Ecris la commande: clean
    echo -e "\nclean:\n\t\$(RM) \$(NAME)" >> $makefile
    
    #Ecris la commande: fclean
    echo -e "\nfclean: clean\n\t\$(RM) \$(NAME)" >> $makefile
    
    #Ecris la commande: re
    echo -e "\nre: fclean all" >> $makefile
    #Write .PHONY
    echo -e "\n.PHONY: all clean fclean re" >> $makefile
    
    #vérifie si le Makefile valide #tricky
    get_value "PROJECT_DIR" true
    
    output=$(make -C $value re)
    if [ $(echo $?) != 0 ]
    then
        printf '%s: invalid config\n' script
        rm -rf $makefile
        exit 84
    else
        output=$(make -C $value fclean)
    fi

    -
    Edité par EtienneEliot 24 juin 2020 à 19:45:00

    • Partager sur Facebook
    • Partager sur Twitter

    Probleme d'apparition de fichier gnco

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown