Salut les C,
J'ai un programme de plusieurs fichiers sources ayant chacun sont header et j'utilise un Makefile pour compiler chaque fichier *.c.
D'abords le sujet N° 1: les variables externes marqué extern.
J'ai une structure de type GUI ressemblant a ceci:
Puis j'ai un fichier de déclaration de variables globale:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 /** File gui_structure.h . **/ typedef struct { GtkWidget *icon ; GtkWidget *label ; GtkWidget *accel_label ; } MenuItem ; /** etc more typedef struct { ... } **/ typedef struct { MenuItem files ; MenuItem action ; GtkWidget *hbox ; // etc... } GUI ; // Etc...
Puis je me retrouve souvent a n'avoir besoin que de gui->notebook_editor ou gui->notebook_terminals, dans mes fichiers.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3/** Files global_variables.h **/ GUI *gui ;
Alors dans mes fonctions je déclare:
Alors j'ai un doute: est que ça serai mieux de déclarer un alias de gui->notebook_editor sous forme de pointeur déclarer comme une variable globale ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void callback(GtkWidget *widget, gpointer user_data) { extern GUI *gui ; // ... return ; }
Je ne le fait pas pour l'instant car je pense que si je déclare:
cela revient au même: copier l'adresse du pointeur de toute la structure GUI *gui c.a.d la taille d'un pointeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part extern GUI *gui ;
A la place d'utiliser un pointeur alias sur un seule GtkWidget *.
NOTE: je ne peut pas passer la variable gui par l'argument user_data.
Sinon j'ai un problème avec le Makefile.
Quand j'ajoute un fichier je l'ajoute a une liste (a savoir que l'arborescence est complexe).
Et j'aimerai utiliser le feature de règle implicite...
Vous avez remarquer que j'utilise un dossier pour le build ce qui rend la chose plus difficile.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 SRC_FILES = ./folder1/file1.c \ ./folder2/file2.c \ ./folder3/subfolder1/file3.c TMP = $(notdir $(SRC_FILES:.c=.o)) OBJECTS = $(TMP:%=./build/%) prgname: $(OBJECTS) $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) $(LDLIBS) $(word 1, $(OBJECTS)): $(word 1, $(SRC_FILES)) $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) $(LDLIBS) # Etc ... # My try for implicite rules build: VPATH = ./folder1 ./folder2 ./folder3/subfolder1 ./build %o: %c $(SRC_FILES) $(OBJECTS) $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) $(LDLIBS) # What lack me to success implicte build ?
Merci pour vos réponses éclairées et votre précieuse aide.
Partager