How to fix the Code::Blocks wizard to look for GTK+ 3.0 and not 2.0?

后端 未结 2 724
不知归路
不知归路 2021-01-24 07:04

I have been using Code::Blocks since I started programming in C, after trying every C compiler in existence under windows I found Code::Blocks the most easiest to work with beca

2条回答
  •  长情又很酷
    2021-01-24 07:41

    Alright people, I figured it out.....I went to command console and ran this command to get all the versions info: pkg-config --cflags gtk+-3.0

    By doing that I got the following information: -mms-bitfields -IC:/GTK3/include/gtk-3.0 -IC:/GTK3/include/cairo -IC:/GTK3/include/pango-1.0 -IC:/GTK3/include/atk-1.0 -IC:/GTK3/include/cairo -IC:/GTK3/include/pixman-1 -IC:/GTK3/include -IC:/GTK3/include/freetype2 -IC:/GTK3/include -IC:/GTK3/include/libpng15 -IC:/GTK3/include/gdk-pixbuf-2.0 -IC:/GTK3/include/libpng15 -IC:/GTK3/include/glib-2.0 -IC:/GTK3/lib/glib-2.0/include

    I went into Code::Blocks and I went to File->New->Project: I then right clicked the GTK+ project icon and selected 'edit this script' I went through the file and changed the files to match the versions in the above information

        ////////////////////////////////////////////////////////////////////////////////
        //
        // 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-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-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;
        }
    

    If you want to setup Code::Blocks so that it doesn't open a win32 console window behind your GTK+ GUI goto Project->Properties->Build targets and then under "Selected build target options" select the Type: dropdown list and select GUI application, it will probably have Console Application selected

    Edit: Come to find out, upon inspection of the script above I realized the you don't have to go through all that trouble to remove the console, all you need to do is select the dropdown menu to the right of 'run' on the toolbar and switch it from Debug to Release XD

提交回复
热议问题