Skip to content
Snippets Groups Projects
Commit 67a9019b authored by CAPACES Nicolas's avatar CAPACES Nicolas
Browse files

modified structure Makefile

parent 9a748595
No related branches found
No related tags found
No related merge requests found
#compilatior
#programms
#---------------
# les programmes utilisés par le Makefile
#---------------
#je remarque que j'ai different résultat selon le symbole d'affectation
#si je met := gcc alors il utilise gcc comme compilateur
#si je met ?= gcc alors il utilise cc comme compilateur
CC := gcc
CC ?= gcc
RM ?= rm
LN ?= ln
INSTALL ?= install
#flags
#---------------------
# les differents drapeaux que j'utilise pour la compilation
#---------------------
CFLAGS ?= -O3 -Wall -Wextra -Wpedantic
SOFLAGS ?= -g -fPIC
LFLAGS ?= -g -fPIC
#flag vers la librarie personnelle
#MFLAG pour "Made Flag"
MFLAGS := -lbase64
......@@ -19,63 +25,92 @@ MFLAGS := -lbase64
# ce qu'il faut complier
#----------------------
LSRCS := base64.c
#ceci nous donne : base64.o
LOBJS := $(LSRCS:.c=.o)
ISRCS := base64.h
SRCS := main.c
#objets
#------------------
# les objets compilés
#------------------
OBJS := $(SRCS:.c=.o)
#ceci nous donne : base64.o
LOBJS := $(LSRCS:.c=.o)
#versions
#--------------------
# la version de la librairie
#-------------------
VMAJOR := 1
VMINOR := 0
VPATCH := 1
VMAJ := 1
VMIN := 0
VPAT := 1
#chemins
#-----------------------
# les differents chemins utilisés dans le programme
#-----------------------
prefix := /usr/local
#je met la librairie dans un chemin reconnu par ldconfig
#je peux voir ceci avec la commande suivante: <$sudo ldconfig -v>
#je peux reseigner ce chemin à ld avec un fichier dans /etc/ld.so.conf.d/
#en revanche il faudra utiliser sudo pour être utilisés
LPATH := /usr/local/lib/
LPATH := $(prefix)/lib
#je met le header dans un chemin que le preprocesseur peux reconnaitre avec les chevrons dans le code C
IPATH := /usr/local/include/
IPATH := $(prefix)/include
#noms
#-------------------
# des noms differents
#-------------------
LNAMES := libbase64.so
SONAMES := $(LNAMES).$(VMAJOR)
#targets
LTARGETS := libbase64.so
#ceci se casse dès qu'il y a plus d'une valeur dans LTARGET
LFULLTARGETS := $(LPATH)$(LTARGETS).$(VMAJOR).$(VMINOR).$(VPATCH)
#--------------------
# les buts de compilation
#--------------------
LTARGETS := $(LNAMES).$(VMAJ).$(VMIN).$(VPAT)
TARGETS := out
IFULLTARGETS := $(IPATH)$(ISRCS)
#installs
#-----------------------
# les fichiers finaux
#-----------------------
IINSTALL := $(IPATH)/$(ISRCS)
#ceci se casse dès qu'il y a plus d'une valeur dans LTARGET
LINSTALL := $(LPATH)/$(LNAMES)
#pour éviter à ce que make soit confu si je met un fichier nommé "all", "clean" ou "totalClean" dans ce repertoire
.PHONY: all clean totalClean
#les dependences sont executés de gauche à droite
#il vérifie la dépendance la plus à gauche et vérifie ses dépendances. une fois satisfaites, il passe à la dépendance suivante.
#je ne sais pas si c'est l'implementation de make
#je ne trouve pas l'information dans la documantation
#la documentation : https://www.gnu.org/software/make/manual/make.html
all: $(IFULLTARGETS) $(LFULLTARGETS) $(TARGETS)
all: $(IINSTALL) $(LINSTALL) $(TARGETS)
@echo ---Compiling successful---
clean:
$(RM) *o
$(RM) $(OBJS) $(LOBJS) $(LTARGETS)
totalClean: clean
sudo $(RM) $(LFULLTARGETS) $(LPATH)$(LTARGETS) $(LPATH)$(LTARGETS).$(VMAJOR) $(IFULLTARGETS) $(TARGETS)
sudo $(RM) $(LINSTALL) $(LINSTALL).$(VMAJ) $(LINSTALL).$(VMAJ).$(VMIN).$(VPAT) $(IINSTALL) $(TARGETS)
$(LFULLTARGETS): $(LOBJS)
sudo $(CC) $(CFLAGS) $(SOFLAGS) -shared -Wl,-soname,$(LTARGETS).$(VMAJOR) $^ -o $@
$(IINSTALL): $(ISRCS)
sudo $(INSTALL) --mode=444 $< $@
$(LINSTALL): $(LTARGETS)
#ld ne cherche que le nom libbase64.so dans les dossiers de "linkage", il faut donc créer des liens symboliques vers la librarie
sudo ln -s $(LFULLTARGETS) $(LPATH)$(LTARGETS).$(VMAJOR) #on peux aussi faire : sudo ldconfig
sudo ln -s $(LPATH)$(LTARGETS).$(VMAJOR) $(LPATH)$(LTARGETS) #je ne connais pas de commande équvalente
sudo $(INSTALL) --mode=544 $< $@.$(VMAJ).$(VMIN).$(VPAT)
#on peux aussi faire : sudo ldconfig
#je ne sais pas si utiliser des if et test dans un Makefile veut dire que je suis allé trop loin ou pas assez
if ! [ -h $@.$(VMAJ) ]; then sudo $(LN) -s $@.$(VMAJ).$(VMIN).$(VPAT) $@.$(VMAJ) ; fi
#je ne connais pas de commande équvalente
if ! [ -h $@ ]; then sudo $(LN) -s $@.$(VMAJ) $@; fi
$(LTARGETS): $(LOBJS)
$(CC) $(CFLAGS) -shared -Wl,-soname,$(SONAMES) $< -o $@
#la compilation fonctionne
#le programme ne fonctionne pas
......@@ -85,11 +120,9 @@ $(TARGETS): $(OBJS)
$(CC) $(CFLAGS) $^ -o $@ $(MFLAGS)
#deplacement des headers
$(IFULLTARGETS): $(ISRCS)
sudo cp $^ $@
$(LOBJS): $(LSRCS)
$(CC) $(CFLAGS) $(SOFLAGS) -c $^ -o $@ -lc
$(CC) $(CFLAGS) $(LFLAGS) -c $< -o $@
$(OBJS): $(SRCS)
#$^ sont toutes les dépendances
......
......@@ -6,7 +6,7 @@
*****************************************/
#include <sys/types.h>
#include <stdint.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
......
......@@ -8,7 +8,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <base64.h>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment