Suite à la demande de mehrad, voici un petit billet qui indique comment installer gtk+. Code blocks a été pris en exemple mais si vous voulez plus faites moi signe ou si vous voulez un tutoriel complet et plein de TP incroyable sur gtk+ utilisable en langage c postez ici.
-il faut ensuite suivre le lien suivant son système d'exploitation. Je suppose que tu es sous Windows ; alors il faut cliquer sur Windows 32 bits ou 64 bits selon ton système (si tu ignores quel est le type de ton système Windows clique sur l’icône de Windows et clique droit sur "ordinateur" ou "poste de travail" selon ta version et puis choisi "propriété" dans le menu qui s'ouvre. Là tu verras le type de ton système)
-il faut ensuite aller vers le bas juste après gtk+ 3.x et choisir le liens "all-in-one bundle" comme sur la capture suivante.
[edit] Voici un lien alternatif pour directement télécharger le "all-in-one-bundle" selon votre système Windows
après téléchargement, il faut décompresser le fichier dans un dossier. ensuite il faut ouvrir codeblocks puis créer un nouveau projet avec codeblocks et dans la liste des projets, venir sur gtk et cliquer droit sur lui et choisir "edit this script"
comme sur la figure suivante :
Alors une page s'affiche, il faut copier son contenu et le sauvegarder dans un fichier texte (en fait c'est une double sécurité car codeblocks prévoit dans son menu, l'option "discard modifications on this script" qui permet de revenir au script d'origine). Il faut ensuite effacer le contenu du script et le remplacer par celui-ci que j'ai créé de toutes pièce car le script de codeblocks ne permet pas de gérer la version 3 de gtk+ mais juste la version 2 c'est d'ailleurs pour cela qu'on a fait tout ce détour pour l'installation. Alors voici le contenu du nouveau script :
////////////////////////////////////////////////////////////////////////////////
//
// GTK project wizard
//
////////////////////////////////////////////////////////////////////////////////
// globals
GtkPathDefault <- _T("$(#gtk)");
GtkPathDefaultInc <- _T("$(#gtk.include)");
GtkPathDefaultLib <- _T("$(#gtk.lib)");
GtkPath <- _T("");
// GtkVersion <- 1; // 0 - GTK+, 1 - GTK+-2.0
function BeginWizard()
{
local intro_msg = _T("Welcome to the new GTK project wizard!\n" +
"This wizard will guide you to create a new GTK project\n" +
"using the GTK cross-platform GUI toolkit\n\n" +
"When you're ready to proceed, please click \"Next\"...");
local gtkpath_msg = _T("Please select the location of GTK on your computer.\n" +
"This is the top-level folder where GTK was installed.\n" +
"To help you, this folder must contain the subfolders\n" +
"\"include\" and \"lib\".");
Wizard.AddInfoPage(_T("GtkIntro"), intro_msg);
Wizard.AddProjectPathPage();
if (PLATFORM == PLATFORM_MSW)
{
Wizard.AddGenericSelectPathPage(_T("GtkPath"), gtkpath_msg, _T("GTK's location:"), GtkPathDefault);
}
/*else
{
Wizard.AddGenericSingleChoiceListPage(_T("GtkVersionPage"), _T("Please select the GTK+ version you want to use."), _T("GTK+ 1.x;GTK+ 2.x"), GtkVersion); // select GTK+ version
}*/
Wizard.AddCompilerPage(_T(""), _T("gcc*"), true, true);
}
////////////////////////////////////////////////////////////////////////////////
// Gtk's path page
////////////////////////////////////////////////////////////////////////////////
function OnLeave_GtkPath(fwd)
{
if (fwd)
{
local dir = Wizard.GetTextControlValue(_T("txtFolder")); // txtFolder is the text control in GenericSelectPathPage
local dir_nomacro = VerifyDirectory(dir);
if (dir_nomacro.IsEmpty())
return false;
// verify include dependencies
local dir_nomacro_inc = GetCompilerIncludeDir(dir, GtkPathDefault, GtkPathDefaultInc);
if (dir_nomacro_inc.IsEmpty())
return false;
if (!VerifyFile(dir_nomacro_inc + wxFILE_SEP_PATH + _T("gtk-3.0") + wxFILE_SEP_PATH +_T("gtk"), _T("gtk.h"), _T("GTK's include")))
return false;
// verify library dependencies
local dir_nomacro_lib = GetCompilerLibDir(dir, GtkPathDefault, GtkPathDefaultLib);
if (dir_nomacro_lib.IsEmpty())
return false;
/* if (!VerifyLibFile(dir_nomacro_lib, _T("gtk-win32-2.0"), _T("GTK's")))
return false;*/
if (!VerifyLibFile(dir_nomacro_lib, _T("gtk-win32-3.0"), _T("GTK's")))
return false;
GtkPath = dir; // Remember the original selection.
local is_macro = _T("");
// try to resolve the include directory as macro
is_macro = GetCompilerIncludeMacro(dir, GtkPathDefault, GtkPathDefaultInc);
if (is_macro.IsEmpty())
{
// not possible -> use the real inc path we had computed instead
GtkPathDefaultInc = dir_nomacro_inc;
}
// try to resolve the library directory as macro
is_macro = GetCompilerLibMacro(dir, GtkPathDefault, GtkPathDefaultLib);
if (is_macro.IsEmpty())
{
// not possible -> use the real lib path we had computed instead
GtkPathDefaultLib = dir_nomacro_lib;
}
}
return true;
}
////////////////////////////////////////////////////////////////////////////////
// Gtk's version page (For *nix users)
////////////////////////////////////////////////////////////////////////////////
function OnLeave_GtkVersionPage(fwd)
{
if (fwd)
{
GtkVersion = Wizard.GetListboxSelection(_T("GenericChoiceList"));
}
return true;
}
// return the files this project contains
function GetFilesDir()
{
return _T("gtk/files");
}
// setup the already created project
function SetupProject(project)
{
if (PLATFORM == PLATFORM_MSW)
{
project.AddIncludeDir(GtkPathDefaultInc);
project.AddIncludeDir(GtkPathDefaultInc + wxFILE_SEP_PATH + _T("gtk-3.0"));
project.AddIncludeDir(GtkPathDefaultInc + wxFILE_SEP_PATH + _T("cairo"));
project.AddIncludeDir(GtkPathDefaultInc + wxFILE_SEP_PATH + _T("gdk"));
project.AddIncludeDir(GtkPathDefaultInc + wxFILE_SEP_PATH + _T("glib-2.0"));
// Notice GtkPathDefault*Lib* at some positions. This is correct as of 2.8.20
project.AddIncludeDir(GtkPathDefaultLib + wxFILE_SEP_PATH + _T("glib-2.0") + wxFILE_SEP_PATH + _T("include"));
project.AddIncludeDir(GtkPathDefaultInc + wxFILE_SEP_PATH + _T("pango-1.0"));
project.AddIncludeDir(GtkPathDefaultLib + wxFILE_SEP_PATH + _T("gtk-3.0") + wxFILE_SEP_PATH + _T("include"));
project.AddIncludeDir(GtkPathDefaultInc + wxFILE_SEP_PATH + _T("atk-1.0"));
if ( IO.DirectoryExists(GtkPathDefaultInc + wxFILE_SEP_PATH + _T("gdk-pixbuf-2.0")) )
project.AddIncludeDir(GtkPathDefaultInc + wxFILE_SEP_PATH + _T("gdk-pixbuf-2.0"));
project.AddLibDir(GtkPathDefaultLib);
// add link libraries
/* project.AddLinkLib(_T("gtk-win32-2.0"));
generate with pkg-config commande on MS Windows. the command was pkg-config gtk+-3.0 --libs and current directory was
gtk3.0/bin
-lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lpangocairo-1.0
-lpangoft2-1.0 -lfreetype -lfontconfig -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lm -latk-1.0 -lcairo-gobject -lcairo
-lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl
project.AddLinkLib(_T("gtk-3"));
project.AddLinkLib(_T("gdk-3"));
project.AddLinkLib(_T("imm32"));
project.AddLinkLib(_T("shell32"));
project.AddLinkLib(_T("ole32"));
project.AddLinkLib(_T("Wl"));
project.AddLinkLib(_T("uuid"));
project.AddLinkLib(_T("pangocairo-1.0"));
project.AddLinkLib(_T("pangoft2-1.0"));
project.AddLinkLib(_T("freetype"));
project.AddLinkLib(_T("fontconfig"));
project.AddLinkLib(_T("pangowin32-1.0"));
project.AddLinkLib(_T("gdi32"));
project.AddLinkLib(_T("m"));
project.AddLinkLib(_T("atk-1.0"));
project.AddLinkLib(_T("cairo-gobject"));
project.AddLinkLib(_T("cairo"));
project.AddLinkLib(_T("gdk_pixbuf-2.0"));
project.AddLinkLib(_T("gio-2.0"));
project.AddLinkLib(_T("gobject-2.0"));
project.AddLinkLib(_T("glib-2.0"));
project.AddLinkLib(_T("intl"));
//project.AddLinkLib(_T("glib-2.0"));*/
project.AddLibDir(GtkPathDefaultLib);
// add link libraries
project.AddLinkLib(_T("gtk-win32-3.0"));
project.AddLinkLib(_T("gobject-2.0"));
project.AddLinkLib(_T("glib-2.0"));
// Notice: there are more libs required as the app gets more complex, e.g.:
// pangocairo-1.0.lib, pangocairo-1.0.lib, libatk-1.0.dll.a,
// gdk_pixbuf-2.0.lib, gdk-win32-2.0.lib, pango-1.0.lib,
// gmodule-2.0.lib, gthread-2.0.lib, cairo.lib,
// pangoft2-1.0.lib (...)
project.AddCompilerOption(_T("-mms-bitfields"));
}
else
{
/*if (GtkVersion == 1)
{*/
project.AddCompilerOption(_T("`pkg-config gtk+-3.0 --cflags`"));
project.AddLinkerOption(_T("`pkg-config gtk+-3.0 --libs`"));
/*}
else
{
project.AddCompilerOption(_T("`pkg-config gtk+ --cflags`"));
project.AddLinkerOption(_T("`pkg-config gtk+ --libs`"));
}*/
}
// enable compiler warnings (project-wide)
WarningsOn(project, Wizard.GetCompilerID());
// Debug
local target = project.GetBuildTarget(Wizard.GetDebugName());
if (!IsNull(target))
{
target.SetTargetType(ttConsoleOnly); // ttConsoleOnly: console for debugging
target.SetOutputFilename(Wizard.GetDebugOutputDir() + Wizard.GetProjectName() + DOT_EXT_EXECUTABLE);
// enable generation of debugging symbols for target
DebugSymbolsOn(target, Wizard.GetCompilerID());
}
// Release
target = project.GetBuildTarget(Wizard.GetReleaseName());
if (!IsNull(target))
{
target.SetTargetType(ttExecutable); // ttExecutable: no console
target.SetOutputFilename(Wizard.GetReleaseOutputDir() + Wizard.GetProjectName() + DOT_EXT_EXECUTABLE);
// enable optimizations for target
OptimizationsOn(target, Wizard.GetCompilerID());
}
return true;
}
Il faut ensuite l'enregistrer. Il faut alors réessayer de créer un nouveau projet gtk+ mais cette fois une fois que l'assistant de création de projet se présente, il faut juste choisir gtk+ en double-cliquant dessus. Si tout se passe bien l'assistant vous demande le nom de votre projet alors fournissez toutes les infos et enfin cliquez suivant et là une nouvelle boite s'ouvre cliquez encore suivant et une autre boite s'ouvre vous indiquant qu'il ne sait pas où se trouve gtk sur votre ordinateur.
Alors vous allez dans le champ base et renseignez le dossier où vous aviez décompresser le contenu de votre zip "all-in-one-bundle" précédemment téléchargé.
ensuite vous faites la même chose pour les champs en indiquant le dossier includes qui se trouve dans votre dossier décompressé pour le champ include
et vous faites la même chose pour le champ lib en indiquant le chemin qui mène également à votre dossier lib lui aussi situé dans votre dossier décompressé. et voilà un projet s'ouvre avec un fichier main.c qui contient du code compilez le et voyez le résultat.
ps : ce code est un peu vieillot il y aura donc des warnings. si vous voulez un code plus simple voici
Voilà j'espère avoir été claire ; si vous avez des questions n’hésitez pas et si vous voulez un tuto complet sur gtk+ avec le langage c alors je vais m'y lancer.
- Edité par cotoporto 1 octobre 2018 à 17:52:04
tu aimerais apprendre l'assembleur avec NASM depuis zéro ? clique ici suis le fil de discussions ici
Merci encore pour ce tutoriel, en effet il serait assez intéressant qu'un cours soit (re)créé à ce sujet car le gtk+ est une bibliothèque assez simple d'utilisation mais tout de même efficace, et il serait dommage de ne pas faire un cours sur le site.
En suivant votre procédure, je rencontre un problème : après avoir recopié et enregistré votre code dans le fichier wizard.script et après l'avoir enregistré, je crée un nouveau projet, mais lorsque je double-clique sur gtk+, une erreur s'affiche et m'indique "expression expected" à la ligne 6 colonne 2 du code.
P-S : je suis sous windows 7 64 bits.
P-S 2 : lorsque je modifie le fichier wizard. script, un message s'affiche et me dit que ce fichier n'existe pas à cet emplacement, et il me demande si je veux laisser la fenêtre affichée (j'ai répondu oui).
Salut par ici alors... J'ai finalement fait les tests et ils s'avèrent tous concluant ! Je ne vois donc pas directement ce qui ne marche pas chez vous. Alors voici comment on va procéder : vous m'envoyer les scripts originaux de votre lanceur de projet gtk avant vote modification ; et je vais voir comment l'adapter sinon peut être aussi que c'est spécifique à la version 64 bits car moi j'ai un 32 bits...
tu aimerais apprendre l'assembleur avec NASM depuis zéro ? clique ici suis le fil de discussions ici
Effectivement ça marche nettement mieux avec ce script !
Ceci dit j'avais néanmoins une erreur de compilation genre "je ne trouve pas 'C:\gtk\include\gdk' et 'C:\gtk\lib\gtk-3.0\include' "
qui sont effectivement des classeurs inexistants.
Pour résoudre (??) ce problème je suis allé dans "Project -> build options -> Compiler -> Search directory" et j'ai enlevé ces deux répertoires en question (Attention il faut ni être en "Debug" ni en "Release" à gauche en haut de cette fenêtre mais directement sur la globalité du projet, en cliquant sur son nom). J'arrive maintenant à compiler et à lancer le programme minimaliste.
Je suis sous windows7 64bits mais j'ai installé la version 32bits de GKT+ car mon compilateur est en 32 bits. Je pense que la version 64bits de MinGW n'est pas installé avec CodeBlocks.
Salut en fait je crains que ton problème n'ai rien avoir avec mon script. Il me semble que tu as juste oublié de "linker" avec les librairies appropriées. Donc tu ouvres ton projet, tu vas dans "build options" dans le menu "project" et choisi l'onglet lib et renseigne les fichiers *.lib.
Cordialement.
tu aimerais apprendre l'assembleur avec NASM depuis zéro ? clique ici suis le fil de discussions ici
J'ai bien suivi les instructions comme indiqués, mais lors de l'éxecution on me dit que la libgtk-3-0.dll est introuvable et je ne sais comment resoudre le probleme
@AbelSadia apparemment le programme du compile utilise Cairo. Or, il semblerait que tu n'ai pas lié la dll de Cairo au programme.
Peux-tu donc mettre ici la liste des DLLs que tu as linké à ton programme et aussi mettre ici si possible ton code-source (s'il ne fait pas des centaines de ligne).