如何修复Code :: Blocks向导来查找GTK + 3.0而不是2.0?

Joh*_*ner 1 c codeblocks gtk3

我一直在使用Code :: Blocks,因为我在C中开始编程,在尝试了Windows下存在的每个C编译器后,我发现Code :: Blocks是最容易使用的,因为我不需要花费整整一年的时间学习如何在我开始编写"hello world"应用程序之前使用该程序XD ......

无论如何我安装了GTK + 3.0并设置环境变量并运行cmd提示命令,因为安装教程告诉我....我甚至从cmd提示符运行了gtk-demo文件....当我去运行时代码::块13.10 gtk +向导它一直告诉我GTK +好像已经安装了但是在做了一些挖掘后它找不到gtk.h我意识到它正在寻找gtk-2.0文件夹而不是gtk-3.0文件夹. ..

另一个论坛上的某个人似乎已经通过在向导脚本中将2.0更改为3.0来超越该部分,但声称一旦他尝试编译它就会给他带来更多错误.

Joh*_*ner 6

好的人,我想出来了.....我去了命令控制台并运行此命令获取所有版本信息:pkg-config --cflags gtk + -3.0

通过这样做,我得到以下信息:-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 /包括

我进入Code :: Blocks并进入File-> New-> Project:然后右键单击GTK +项目图标并选择"编辑此脚本"我浏览了文件并更改了文件以匹配上面的版本信息

    ////////////////////////////////////////////////////////////////////////////////
    //
    // 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;
    }
Run Code Online (Sandbox Code Playgroud)

如果你想设置Code :: Blocks,那么它不会打开你的GTK + GUI后面的win32控制台窗口转到Project-> Properties-> Build targets,然后在"Selected build target options"下选择Type:下拉列表并选择GUI应用程序,它可能会选择控制台应用程序

编辑:来看看,通过检查上面的脚本我意识到你不必经历所有麻烦去除控制台,你需要做的就是选择'run'右边的下拉菜单工具栏并将其从Debug切换到Release XD