Linux에서 Freeglut으로 Codeblocks 설정

내 컴퓨터 그래픽 수업에서 선생님은 과잉을 위해 Codeblocks를 설정하도록 요청했습니다. 그녀는 Windows에서 Codeblocks를 설정하는 방법에 대한 놀라운 자습서를 제공했지만 Linux에서 설정하는 방법에 대한 제안은 제공하지 않았습니다. Google에서 조사한 후 Freeglut(Glut의 대안이며 Linux에서 사용 가능)으로 Codeblocks를 설정할 수 있었습니다. 이것은 내가 Freeglut으로 Codeblocks를 설정할 수 있었던 방법에 대한 일종의 글(또는 튜토리얼)입니다.

This setup is tested and working on Pop os, as of writing, should be working with Ubuntu/Debian with the latest Codeblocks.



또한 내가 수집한 게시물에 연결하고 Codeblocks가 제대로 작동하도록 설정했습니다.

설치 부분



물론 이 모든 것을 사용하려면 필요한 모든 파일을 설치해야 합니다.

Freeglut의 경우:

sudo apt install g++ freeglut3 freeglut3-dev

sudo apt install libxmu-dev libxi-dev


Codeblock의 경우:

sudo apt install codeblocks


OpenGL의 경우:

sudo apt install build-essential libgl1-mesa-dev

sudo apt install libglew-dev libsdl2-dev libsdl2-image-dev libglm-dev libfreetype6-dev  # some libraries


OpenGL 설치 확인:

glxinfo | grep OpenGL


설정 부분



Codeblocks를 열고 settings > Global Variables로 이동합니다.new 를 클릭하면 다음과 같이 표시됩니다.


freeglut를 입력하고 확인을 누르고 나머지는 다음과 같이 설정합니다.



이제 Codeblocks를 닫습니다.

나머지 부분은 here에서 수집됩니다.
  • /usr/share/codeblocks/templates 로 이동하여 freeglut.cbp 파일을 만들고 다음 코드를 입력합니다.

  • <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <CodeBlocks_project_file>
        <FileVersion major="1" minor="4" />
        <Project>
            <Option title="freeglut" />
            <Option pch_mode="0" />
            <Option compiler="gcc" />
            <Build>
                <Target title="default">
                    <Option output="freeglut.exe" />
                    <Option type="0" />
                    <Option compiler="gcc" />
                    <Option includeInTargetAll="1" />
                </Target>
            </Build>
            <Compiler>
                <Add directory="$(#freeglut.include)" />
            </Compiler>
            <Linker>
                <Add library="freeglut" />
                <Add library="glu32" />
                <Add library="opengl32" />
                <Add library="winmm" />
                <Add library="gdi32" />
                <Add library="user32" />
                <Add library="kernel32" />
                <Add directory="$(#freeglut.lib)" />
            </Linker>
            <Unit filename="main.cpp">
                <Option compilerVar="CPP" />
                <Option target="default" />
            </Unit>
        </Project>
    </CodeBlocks_project_file>
    


    저장해.
  • /usr/share/codeblocks/templates/wizard/에 freeglut이라는 디렉토리를 만듭니다. 거기에서 glut라는 다른 디렉토리를 찾을 수 있습니다. 모든 내용을 복사하여 새로 생성된 freeglut 디렉토리에 붙여넣습니다.
  • 이제 생성된 freeglut 디렉토리로 이동하여 wizard.script 파일을 편집하고 다음을 붙여넣습니다.

  • ////////////////////////////////////////////////////////////////////////////////
    //
    // FreeGLUT project wizard
    //
    ////////////////////////////////////////////////////////////////////////////////
    
    // globals
    FreeGlutPathDefault    <- _T("$(#freeglut)");
    FreeGlutPathDefaultInc <- _T("$(#freeglut.include)");
    FreeGlutPathDefaultLib <- _T("$(#freeglut.lib)");
    FreeGlutPath <- _T("");
    
    function BeginWizard()
    {
        local intro_msg = _T("Welcome to the new FreeGLUT project wizard!\n\n" +
                             "This wizard will guide you to create a new project\n" +
                             "using the FreeGLUT OpenGL extensions.\n\n" +
                             "When you 're ready to proceed, please click \"Next\"...");
    
        local glutpath_descr = _T("Please select the location of FreeGLUT on your computer.\n" +
                                  "This is the top-level folder where FreeGLUT was installed (unpacked).\n" +
                                  "To help you, this folder must contain the subfolders\n" +
                                  "\"include\" and \"lib\".");
    
        Wizard.AddInfoPage(_T("GlutIntro"), intro_msg);
        Wizard.AddProjectPathPage();
        if (PLATFORM == PLATFORM_MAC)
        {
            FreeGlutPathDefault="/System/Library/Frameworks/FreeGLUT.framework";
        }
        else
            Wizard.AddGenericSelectPathPage(_T("FreeGlutPath"), glutpath_descr, _T("Please select FreeGLUT's location:"), FreeGlutPathDefault);
        Wizard.AddCompilerPage(_T(""), _T("*"), true, true);
    }
    
    ////////////////////////////////////////////////////////////////////////////////
    // GLUT's path page
    ////////////////////////////////////////////////////////////////////////////////
    
    function OnLeave_GlutPath(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, FreeGlutPathDefault, FreeGlutPathDefaultInc);
            if (dir_nomacro_inc.IsEmpty())
                return false;
            if (!VerifyFile(dir_nomacro_inc + wxFILE_SEP_PATH + _T("GL"), _T("freeglut.h"), _T("FreeGLUT's include"))) return false;
    
            // verify library dependencies
            local dir_nomacro_lib = GetCompilerLibDir(dir, FreeGlutPathDefault, FreeGlutPathDefaultLib);
            if (dir_nomacro_lib.IsEmpty())
                return false;
    
            if (PLATFORM == PLATFORM_MSW)
            {
                if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("FreeGLUT's"))) return false;
            }
            else
            {
                if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("FreeGLUT's"))) return false;
            }
    
    
            FreeGlutPath = dir; // Remember the original selection.
    
            local is_macro = _T("");
    
            // try to resolve the include directory as macro
            is_macro = GetCompilerIncludeMacro(dir, FreeGlutPathDefault, FreeGlutPathDefaultInc);
            if (is_macro.IsEmpty())
            {
                // not possible -> use the real inc path we had computed instead
                FreeGlutPathDefaultInc = dir_nomacro_inc;
            }
    
            // try to resolve the library directory as macro
            is_macro = GetCompilerLibMacro(dir, FreeGlutPathDefault, FreeGlutPathDefaultLib);
            if (is_macro.IsEmpty())
            {
                // not possible -> use the real lib path we had computed instead
                FreeGlutPathDefaultLib = dir_nomacro_lib;
            }
        }
        return true;
    }
    
    // return the files this project contains
    function GetFilesDir()
    {
        return _T("glut/files");
    }
    
    // setup the already created project
    function SetupProject(project)
    {
        // set project options
        if (PLATFORM != PLATFORM_MAC)
        {
            project.AddIncludeDir(FreeGlutPathDefaultInc);
            project.AddLibDir(FreeGlutPathDefaultLib);
        }
    
        // add link libraries
        if (PLATFORM == PLATFORM_MSW)
        {
            project.AddLinkLib(_T("freeglut"));
            project.AddLinkLib(_T("opengl32"));
            project.AddLinkLib(_T("glu32"));
            project.AddLinkLib(_T("winmm"));
            project.AddLinkLib(_T("gdi32"));
        }
        else if (PLATFORM == PLATFORM_MAC)
        {
            project.AddLinkerOption(_T("-framework GLUT"));
            project.AddLinkerOption(_T("-framework OpenGL"));
    
            project.AddLinkerOption(_T("-framework Cocoa")); // GLUT dependency
        }
        else
        {
            project.AddLinkLib(_T("glut"));
            project.AddLinkLib(_T("GL"));
            project.AddLinkLib(_T("GLU"));
            project.AddLinkLib(_T("Xxf86vm"));
        }
    
        // 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);
            target.SetWorkingDir(FreeGlutPath + _T("/bin"));
            // 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);
            target.SetWorkingDir(FreeGlutPath + _T("/bin"));
            // enable optimizations for target
            OptimizationsOn(target, Wizard.GetCompilerID());
        }
    
        return true;
    }
    


    저장해.
  • 이제 /usr/share/codeblocks/templates/wizard 디렉토리에 config.script라는 스크립트가 있고 파일 끝에 다음 줄을 추가합니다.

  • RegisterWizard(wizProject,     _T("freeglut"),     _T("FreeGLUT project"),      _T("2D/3D Graphics"));
    


  • 이제 이link로 이동하십시오. 이것은 Freeglut 프로젝트의 소스 파일입니다. 최신 안정 파일을 다운로드하십시오:


  • 추출합니다.
  • 추출된 폴더의 내용을 복사하여 /usr/share/codeblocks/templates/wizard/freeglut 디렉토리에 붙여넣습니다. 작성 당시에는 다음과 같이 표시됩니다.



  • Codeblocks 설정 부분



    모든 것이 잘/올바르게 진행되면 Codeblocks는 경고/오류 표시 없이 열려 있어야 합니다.
  • Codeblock을 엽니다. File > New > Projects로 이동하면 다음 대화 상자가 Freeglut 프로젝트와 함께 표시되어야 합니다.


  • 적절하다고 생각되는 프로젝트 이름을 지정하십시오:


  • 그런 다음 Freeglut이 있는 위치를 지정합니다.


  • 다음 대화 상자를 그대로 둡니다(아무것도 변경하지 않음):



  • 이 시점에서 Codeblocks는 Freeglut 프로젝트를 위해 준비되어야 합니다.

    마지막 부분



    일이 잘 되는지 안 되는지 확인만 하면 됩니다.
  • 소스로 이동하면 테스트 실행을 위한 main.cpp 파일이 있어야 합니다.


  • 빌드하고 실행하세요!





  • 그게 다야.

    좋아, 그게 다야. 희망, 모든 것이 잘 작동합니다.
    나중에 보자!

    좋은 웹페이지 즐겨찾기