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

后端 未结 2 720
不知归路
不知归路 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:36

    THESE DETAILS MAY NOT APPLY TO ANY VERSION OF CODE::BLOCKS OTHER THAN 17.12

    I had the same problem with Code::Blocks 17.12 on Ubuntu 16.04

    As per the answer above, the solution (for me) was to modify the GTK Wizard script, but this is a little different than described, perhaps because of differing Code::Blocks versions.

    Code::Blocks -> New -> Project -> right-click 'GTK+ Project' -> select 'Edit this script'

    Code::Blocks will now display a script in an editor pane. But this script is locked. It also is not saved anywhere.

    Save the file Code::Blocks -> File -> Save

    The file will be saved to ~/.local/share/codeblocks/templates/wizard/gtk as wizard.script

    Close this file in Code::Blocks (click the 'x' in the editor pane tab)

    Open the file using some other editor (vi(m), Geany, whatever...)

    Near the base of the file are the lines...

        project.AddCompilerOption(_T("`pkg-config gtk+-2.0 --cflags`"));
    
        project.AddLinkerOption(_T("`pkg-config gtk+-2.0 --libs`"));    
    

    Either comment these out and add two new lines or modify the lines as follows

        project.AddCompilerOption(_T("`pkg-config gtk+-3.0 --cflags`"));
    
        project.AddLinkerOption(_T("`pkg-config gtk+-3.0 --libs`"));    
    

    Note 'gtk+-2.0' has been altered to 'gtk+-3.0' in both lines

    Start Code::Blocks and create a NEW project. This should now compile.

    Note: GTK3 projects created previously will NOT compile.

    Note: The Code::Blocks New -> Project -> GTK+ Wizard icon will now display in RED. This indicates that the GTK+ project wizard script has been modified.

    0 讨论(0)
  • 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

    0 讨论(0)
提交回复
热议问题