Utiliser gtk+2.0 avec gcc // probleme avec les options de compilations

[Résolu]
Signaler
Messages postés
21
Date d'inscription
samedi 1 août 2009
Statut
Membre
Dernière intervention
20 mai 2011
-
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
-
Bonkour,

j'ai un probleme avec mon compilateur (gcc) je voudrai utiliser gtk+2.0; la librairie est installée et correctement liée à l'IDE (NetBeans).

Voici la ligne que j'ai trouvé sur internet:

gcc -o main.c gtkGui $(pkg-config --libs --cflags gtk+-2.0)


Le compilateur me dit qu'il manque un argument après --
Pouvez vous m'aidez?

7 réponses

Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Et bien il est un peu vide ton makefile, tu ne vas pas vraiment pouvoir faire grand chose avec si tu ne remplis rien ^^ Allez en voici un petit :

NAME = nom_de_ton_programme
CC = gcc
LD = gcc
CFLAGS = `pkg-config --cflags gtk+-2.0`
LDFLAGS = `pkg-config --libs gtk+-2.0`
SRC = main.c
OBJ = $(SRC:.c=.o)
RM = rf -f

all: $(OBJ)
     $(LD) -o $(NAME) $(OBJ) $(LDFLAGS)

clean:
     $(RM) $(OBJ) $(NAME)

Remplace juste nom_de_ton_programme par le nom de ton programme et main.c par la liste de tes fichiers source. Juste un truc, avoir un seul makefile c'est vraiment pas top si tu as tes sources dans des sous dossiers, si c'est le cas penche toi donc sur les autotools.

Quelques généralité sur le makefile :
On a ici commencé par définir des variables. CC est le compilateur, LD l'éditeur de liens, CFLAGS les options à passer au compilateur, LDFLAGS celels à passer à l'éditeur de lien, SRC la liste des fichiers sources, OBJ est la liste des fichiers objet (ici créé dynamiquement, on indique que c'est la même chose que les fichiers sources mais avec .o comme extension) et enfin RM qui vas nous servir a supprimer des fichiers.
On défini ensuite des règles. La règle all est appelée lorsque l'on tape simplement `make`, c'est le cas le plus courrant, pour appeller une autre règle il faudra faire `make nom_de_la_règle`. Une règle se défini de la manière suivante (les éléments entre crochets étant facultatifs) :
nom_de_la_règle: [liste des dépendances]
[liste des actions à effectuer]
Ainsi notre règle all dépend de $(OBJ), ceci aura pour effet d'appeler automatiquement pour chaque source le compilateur CC avec les CFLAGS en paramètre, et donc de créer les fichiers objet. Ensuite dans la liste des actions de all on a mis la ligne qui permet de réaliser l'édition des liens afin d'obtenir notre exécutable.
Pour ce qui est de la règle clean, elle n'a aucune dépendance. Elle ne fait que supprimer les fichiers objet et l'exécutable généré s'ils existent afin de nettoyer le répertoire.

Bref, maintenant à toi d'adapter en fonction de tes besoins
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Salut,

Essaye donc comme ceci :
gcc -o gtkGui main.c `pkg-config --libs --cflags gtk+-2.0`
Messages postés
21
Date d'inscription
samedi 1 août 2009
Statut
Membre
Dernière intervention
20 mai 2011

Merci pour ton aide, je bloque une peu là...
J'ai copier ta commande, voilà ce que réponds le compilateur:

make: Warning: Ignoring DistributedMake -o option
Usage : make [ -f makefile ][ -K statefile ]... [ -d ][ -dd ][ -D ][ -DD ]
[ -e ][ -i ][ -k ][ -n ][ -p ][ -P ][ -q ][ -r ][ -s ][ -S ][ -t ]
[ -u ][ -w ][ -V ][ target... ][ macro=value... ][ "macro +=value"... ]
make: Fatal error: Missing argument after `--'
CLEAN FAILED (exit value 1, total time: 74ms)


Je ne sais pas trop comment le prendre....
Si tu peux m'aider
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Salut,

Si tu utilises un makefile pour compiler, il serait sans doute plus judicieux de poster son contenu ici.
Messages postés
21
Date d'inscription
samedi 1 août 2009
Statut
Membre
Dernière intervention
20 mai 2011

Euh... oui désolé, je connais pas du tout ce système.
J'ai copié/collé ci après tout le fichier, ne connaissant pas les éléments importants... désolé si c'est pas très joli

Make file relatif au projet:

#
# There exist several targets which are by default empty and which can be
# used for execution of your targets. These targets are usually executed
# before and after some main targets. They are:
#
# .build-pre: called before 'build' target
# .build-post: called after 'build' target
# .clean-pre: called before 'clean' target
# .clean-post: called after 'clean' target
# .clobber-pre: called before 'clobber' target
# .clobber-post: called after 'clobber' target
# .all-pre: called before 'all' target
# .all-post: called after 'all' target
# .help-pre: called before 'help' target
# .help-post: called after 'help' target
#
# Targets beginning with '.' are not intended to be called on their own.
#
# Main targets can be executed directly, and they are:
#
# build build a specific configuration
# clean remove built files from a configuration
# clobber remove all built files
# all build all configurations
# help print help mesage
#
# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and
# .help-impl are implemented in nbproject/makefile-impl.mk.
#
# Available make variables:
#
# CND_BASEDIR base directory for relative paths
# CND_DISTDIR default top distribution directory (build artifacts)
# CND_BUILDDIR default top build directory (object files, ...)
# CONF name of current configuration
# CND_PLATFORM_${CONF} platform name (current configuration)
# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration)
# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration)
# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration)
# CND_PACKAGE_DIR_${CONF} directory of package (current configuration)
# CND_PACKAGE_NAME_${CONF} name of package (current configuration)
# CND_PACKAGE_PATH_${CONF} path to package (current configuration)
#
# NOCDDL


# Environment
MKDIR=mkdir
CP=cp
CCADMIN=CCadmin
RANLIB=ranlib


# build
build: .build-post

.build-pre:
# Add your pre 'build' code here...

.build-post: .build-impl
# Add your post 'build' code here...


# clean
clean: .clean-post

.clean-pre:
# Add your pre 'clean' code here...

.clean-post: .clean-impl
# Add your post 'clean' code here...


# clobber
clobber: .clobber-post

.clobber-pre:
# Add your pre 'clobber' code here...

.clobber-post: .clobber-impl
# Add your post 'clobber' code here...


# all
all: .all-post

.all-pre:
# Add your pre 'all' code here...

.all-post: .all-impl
# Add your post 'all' code here...


# help
help: .help-post

.help-pre:
# Add your pre 'help' code here...

.help-post: .help-impl
# Add your post 'help' code here...



# include project implementation makefile
include nbproject/Makefile-impl.mk

# include project make variables
include nbproject/Makefile-variables.mk


Voilà, si tu sais en tirer quelque chose...ben... un Grand Merci!

François
Messages postés
21
Date d'inscription
samedi 1 août 2009
Statut
Membre
Dernière intervention
20 mai 2011

Okay,
merci beaucoup je vais me pencher un peu sur les makefiles...
je ne m'en suis pas servi jusqu'à maintenant, j'ignorai completement qu'il fallait les remplir.
Donc un autotool automatise cette phase?

Bonne soirée,

François
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Donc un autotool automatise cette phase?

Oui, mais tu n'échapperas pas à l'écriture d'un fichier de config. Dans le cas d'un petit projet écrire les makefile à la main reste très bien, les autotools c'est plus "usine à gaz".