Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

CodeBlocks Portable mit MinGW 32 und 64 Bit unter Windows

Mitglied: rubberman

rubberman (Level 3) - Jetzt verbinden

28.02.2013, aktualisiert 20.10.2018, 19958 Aufrufe, 29 Kommentare, 9 Danke

Entwicklungsumgebung und C/C++ Compiler für 32 und 64 Bit Windowssysteme.
Portable (natürlich ebenso lokal auf Festplatte) nutzbar durch ein VBScript, das als Launcher fungiert und Code::Blocks mit den nötigen Einstellungen startet.



1. Vorwort

Hallo Community.

Seit ca. 2 Jahren beschäftige ich mich nebenbei ab und zu mit C und C++. Schon damals war ich auf der Suche nach einer portablen IDE. Neben dem VC++ bin ich mit Code::Blocks als IDE einigermaßen glücklich. Während man den VC++ wohl nicht dazu überreden kann auch portable zu funktionieren, geht das bei Code::Blocks mit wenigen Tricks. Es gibt auch bereits Portable Versionen, die mich aber nicht überzeugt haben. Aus diesem Grund habe ich damit begonnen eine eigene Umsetzung zu entwickeln. Ein VBScript schien mir der Weg des geringsten Widerstands, da leicht editierbar und mit dem benötigten XML Support.
Nachdem Windows x64 nun auch bei mir angekommen ist, habe ich das ganze noch einmal etwas überarbeitet und dachte mir, dass es vielleicht auch für euch von Interesse sein könnte.

Grüße
rubberman

2. Voraussetzungen

2.1. Systemvoraussetzungen

  • Windows Betriebssystem (bislang getestet unter XP x86, sowie Win7 x86, Win7 x64 und Win10 x64)
  • > 1,3 GB Speicherplatz (Stand Juli 2018)

2.2. 7-Zip

Die Compiler kommen in *.7z Dateien verpackt. Wer keinen passenden Unzipper zur Verfügung hat, sollte vorab 7-Zip installieren.

3. Vorbereitung

Natürlich benötigt man eine entsprechende Verzeichnisstruktur, damit das Ganze auch funktioniert. Weil Compiler über die Kommandozeile angesteuert werden, ist es sicherer wenn keines der Verzeichnisse und Unterverzeichnisse Leerzeichen oder Sonderzeichen, wie & oder % enthält.
  • Zunächst also ein neues Verzeichnis anlegen, sinnvollerweise "CodeBlocksPortable" benennen. (Dort erstellen, wo du uneingeschränkte Schreibrechte auf die Verzeichnisstruktur hast!)
  • In dieses Verzeichnis ein Unterverzeichnis "CodeBlocks", das die IDE beinhalten soll,
  • ein Unterverzeichnis "Projects", das später die Projekte beinhaltet,
  • sowie eine weiteres Unterverzeichnis "Additional_Include". Dort können selbst erstellte Header Dateien abgelegt werden, die immer wieder verwendet werden, oder auch bspw. die gern verwendeten "Boost" Header.

(Anmerkung: Wird im "Projects" Verzeichnis ein Unterverzeichnis "_archive_" erstellt, in das abgeschlossen Projekte verschoben werden können, so bleiben diese Projekte für die Anzeige in "Recent projects" des Code::Blocks Startfensters ausgeschlossen. Das kann die Verarbeitungszeit des Startscripts enorm verkürzen.)

Die Struktur sollte nun also so aussehen:
CodeBlocksPortable
    ├─ Additional_Include
    ├─ CodeBlocks
    └─ Projects
Du kannst diesen Verzeichnissen auch andere Namen geben, schließlich musst du damit arbeiten können.

4. Installationen

4.1. Code::Blocks (IDE)

Die codeblocks-NN.MM-nosetup.zip hier (www.codeblocks.org/downloads/binaries) downloaden. NN.MM steht dabei für die aktuelle Version. (Aktuell codeblocks-17.12-nosetup.zip)
WICHTIG: Nicht das mingw enthaltende Archiv herunterladen! Dort käme eine GCC Version mit, die unvollständige Windows Header beinhaltet.

Den Inhalt des ZIP Archivs in das "CodeBlocks" Unterverzeichnis entpacken.

Im CodeBlocks Unterverzeichnis sollten sich nun unter anderem das "share" Verzeichnis und die "codeblocks.exe" finden:
CodeBlocksPortable
    ├─ Additional_Include
    ├─ CodeBlocks
    │      ├─ share
    │      └─ (codeblocks.exe)
    │
    └─ Projects
(Die codeblocks.exe bitte niemals per Doppelklick starten. Das erledigt das VBScript später.)

4.2. MinGW32 und MinGW64 (Compiler)

Nun, da die IDE vorhanden ist, benötigst du noch einen Compiler. Genauer gesagt zwei Compiler, um das Feature nutzen zu können sowohl 32-Bit als auch 64-Bit-Applikationen erstellen zu können.
Beide findest du hier (sourceforge.net/projects/mingw-w64-dgn/files/mingw-w64/).
Suche dort die Downloads
"mingw-w64-bin-x86_64-YYYYMMDD.7z"
und
"mingw-w32-bin-i686-YYYYMMDD.7z".
Das YYYYMMDD steht dabei für Jahr, Monat und Tag. Wähle die jeweils aktuellste Version. In den Archiven enthalten ist jeweils ein Verzeichnis, "mingw64" bzw. "mingw32".

Beide *.7z Dateien in "CodeBlocksPortable\CodeBlocks" entpacken. Die neue Verzeichnisstruktur sieht nun so aus:
CodeBlocksPortable
    ├─ Additional_Include
    ├─ CodeBlocks
    │      ├─ mingw32
    │      ├─ mingw64
    │      ├─ share
    │      └─ (codeblocks.exe)
    │
    └─ Projects

4.3. Deutsches Menü gefällig?

Wer mit der englischen Menüführung in Code::Blocks glücklich ist, sollte diesen Punkt überspringen. Wer lieber ein weitgehend deutsches Menü bevorzugt, benötigt noch eine zusätzliche Datei "codeblocks.mo". Diese muss in folgendem Pfad liegen:
"CodeBlocksPortable\CodeBlocks\share\CodeBlocks\locale\de_DE"
Nicht existierende Unterverzeichnisse müssen erstellt werden.
Eine Anleitung und die Datei findest du hier (www.opensource-dvd.de/programme/codeblocks.htm).
Falls der Download nicht wie gewünscht funktioniert: Die direkte Downloadlocation ist s521441883.online.de/download_de/codeblocks/codeblocks.mo. Rechtsklick auf diesen Link, "Ziel speichern unter" (je nach Browser ggf. abweichender Wortlaut) und als codeblocks.mo speichern (oder im Nachgang umbenennen).
CodeBlocksPortable
    ├─ Additional_Include
    ├─ CodeBlocks
    │      ├─ mingw32
    │      ├─ mingw64
    │      ├─ share
    │      │      └─ CodeBlocks
    │      │             └─ locale
    │      │                   └─ de_DE
    │      │                          └─ (codeblocks.mo)
    │      │ 
    │      └─ (codeblocks.exe)
    │
    └─ Projects
Starte Code::Blocks aber noch nicht. Führe erst alle weiteren Schritte aus.

5. CB-Portable-Launcher.vbs

5.1. Das Script

Mit dem folgenden VBScript wird "codeblocks.exe" mit den entsprechenden Voreinstellungen gestartet. Somit wird "Code::Blocks" zu "Code::Blocks Portable"
Das Script unter dem Name "CB-Portable-Launcher.vbs" im "CodeBlocksPortable" Verzeichnis speichern.
Option Explicit

Const sConfigXML                = "CB-Portable-Config.xml"
Const adVarChar                 =        200
Const adVarNumeric              =        139
Const adTypeText                =          2
Const adModeReadWrite           =          3
Const adSaveCreateOverWrite     =          2
Const wbemFlagReturnImmediately =       &h10
Const wbemFlagForwardOnly       =       &h20
Const BIF_RETURNONLYFSDIRS      = &h00000001
Const BIF_NONEWFOLDERBUTTON     = &h00000200

Function GetLastVersion
  Const sURL = "https://sourceforge.net/projects/mingw-w64-dgn/files/mingw-w64/", _
        sFilePattern = "mingw-w64-bin-x86_64-20\d{6}\.7z"
  Dim objXMLHTTP, strHTML, objRegex, sVer
  sVer = ""
  On Error Resume Next
  Set objXMLHTTP = CreateObject("Microsoft.XMLHTTP")
  objXMLHTTP.open "GET", sURL, False
  objXMLHTTP.setRequestHeader "Cache-Control", "private, no-cache, no-store, must-revalidate"
  objXMLHTTP.setRequestHeader "Pragma", "no-cache"
  objXMLHTTP.send
  If (objXMLHTTP.readyState = 4 And objXMLHTTP.status = 200) Then
    strHTML = objXMLHTTP.responseText
    Set objRegex = New RegExp
    objRegex.Global = False
    objRegex.IgnoreCase = False
    objRegex.Pattern = "<tr\s+title=""" & sFilePattern & """"
    If objRegex.Test(strHTML) Then
      sVer = objRegex.Execute(strHTML)(0)
      objRegex.Pattern = "\d{8}"
      sVer = objRegex.Execute(sVer)(0)
    End If
  End If
  On Error Goto 0
  GetLastVersion = sVer
End Function

Function GetOSArchitecture()
  Dim objWMI, colOS, objOS
  GetOSArchitecture = "32"
  Set objWMI = GetObject("winmgmts:\\.\root\CIMV2")
  Set colOS = objWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem WHERE NumberOfProcesses > 0", _
    "WQL", wbemFlagReturnImmediately Or wbemFlagForwardOnly)
  For Each objOS In colOS
    On Error Resume Next
    If InStr(1, objOS.CreationClassName, "64", vbTextCompare) > 0 Then GetOSArchitecture = "64"
    If InStr(1, objOS.OSArchitecture, "64", vbTextCompare) > 0 Then GetOSArchitecture = "64"
    On Error Goto 0
  Next
End Function

Function GetRelFolder(ByRef strMsg, ByRef iStyle, ByRef oFSO)
  Dim objFolder, strThisFolder, strSelectedFolder, iDiff, iThisFolder
  GetRelFolder = ""
  strThisFolder = oFSO.GetParentFolderName(WScript.ScriptFullName)
  Set objFolder = CreateObject("Shell.Application").BrowseForFolder(0, _
    "Bitte wählen Sie das " & strMsg & "-Verzeichnis aus.", iStyle, strThisFolder)
  If Not objFolder Is Nothing Then
    strSelectedFolder = objFolder.Self.Path
    iThisFolder = Len(strThisFolder)
    If Left(strSelectedFolder, iThisFolder) = strThisFolder Then
      If iThisFolder = 3 Then iThisFolder = 2
      iDiff = Len(strSelectedFolder) - iThisFolder
      GetRelFolder = Right(strSelectedFolder, iDiff - 1)
      If Not oFSO.FolderExists(GetRelFolder) Then GetRelFolder = ""
    End If
  End If
End Function

Sub GetAllProjects(ByRef oFolder, ByRef oADOR, ByRef oFSO)
  Dim oFile, oSubfolder, sFilePath
  For Each oFile In oFolder.Files
    sFilePath = oFile.Path
    If LCase(oFSO.GetExtensionName(sFilePath)) = "layout" Then
      oADOR.AddNew Array("vcPath", "vnDateLastMod"), Array(Mid(sFilePath, 1, Len(sFilePath) - 6) & "cbp", _
        CDbl(DateDiff("s", CDate(0), oFile.DateLastModified)))
    End If
  Next
  For Each oSubfolder In oFolder.SubFolders
    If oSubfolder.Name <> "_archive_" Then GetAllProjects oSubfolder, oADOR, oFSO
  Next
End Sub

Sub CreateXMLFile(ByRef p1, ByRef p2, ByRef p3, ByRef cu, ByRef oFSO)
  With oFSO.CreateTextFile(sConfigXML)
    .Write "<?xml version=""1.0"" encoding=""Windows-1252"" standalone=""yes""?>" & vbCrLf & _
      "<!-- Einstellungen für CB-Portable-Launcher -->" & vbCrLf & _
      "<CB_Portable_Launcher_Config version=""1"">" & vbCrLf & _
      vbTab & "<relative_pathes description=""Die path-Attribute geben die relativen Pfade an."">" & vbCrLf & _
      vbTab & vbTab & "<CBDir path=""" & p1 & """ description=""Pfad zum CodeBlocks - Rootverzeichnis, RELATIV zum Script"" />" & vbCrLf & _
      vbTab & vbTab & "<ProjDir path=""" & p2 & """ description=""Pfad zum Projects - Rootverzeichnis, RELATIV zum Script"" />" & vbCrLf & _
      vbTab & vbTab & "<AdditionalIncludeDir path=""" & p3 & """ description=""Pfad zum Additional_Include - Rootverzeichnis, RELATIV zum Script"" />" & vbCrLf & _
      vbTab & "</relative_pathes>" & vbCrLf & _
      vbTab & "<search_compiler_update check=""" & cu & """ description=""Versionsdatum des Compilers verifizieren, 0=nein, 1=ja"" />" & vbCrLf & _
      "</CB_Portable_Launcher_Config>"
    .Close
  End With
End Sub

Sub CreateConfFile(ByRef sConfFile)
  ' ggf. "default.conf" mit Voreinstellungen anlegen
  Dim oADOTxtS
  Set oADOTxtS = CreateObject("ADODB.Stream")
  With oADOTxtS
    .Type = adTypeText
    .Mode = adModeReadWrite
    .Charset = "UTF-8"
    .Open
    .WriteText "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes"" ?>" & _
      "<CodeBlocksConfig version=""1""><app>" & _
      "<environment><CHECK_ASSOCIATIONS bool=""0"" /></environment>" & _
      "<SHOW_TIPS bool=""0"" /><RECENT_PROJECTS><astr /></RECENT_PROJECTS>" & _
      "<locale><ENABLE bool=""1"" /></locale></app>" & _
      "<project_manager><DEFAULT_PATH><str /></DEFAULT_PATH></project_manager>" & _
      "<compiler><build_progress />" & _
      "<SETTINGS_VERSION><str><![CDATA[0.0.3]]></str></SETTINGS_VERSION>" & _
      "<sets><gcc><NAME><str><![CDATA[GNU GCC Compiler]]></str></NAME>" & _
      "<LINKER_OPTIONS><str><![CDATA[-static-libgcc;-static-libstdc++;]]></str></LINKER_OPTIONS>" & _
      "<MASTER_PATH><str /></MASTER_PATH>" & _
      "<C_COMPILER><str><![CDATA[gcc.exe]]></str></C_COMPILER>" & _
      "<CPP_COMPILER><str><![CDATA[g++.exe]]></str></CPP_COMPILER>" & _
      "<LINKER><str><![CDATA[g++.exe]]></str></LINKER>" & _
      "<MAKE><str><![CDATA[make.exe]]></str></MAKE></gcc></sets>" & _
      "<DEFAULT_COMPILER><str><![CDATA[gcc]]></str></DEFAULT_COMPILER>" & _
      "</compiler><debugger_common><sets><gdb_debugger><conf1>" & _
      "<NAME><str><![CDATA[Default]]></str></NAME>" & _
      "<values><EXECUTABLE_PATH><str /></EXECUTABLE_PATH></values>" & _
      "</conf1></gdb_debugger></sets></debugger_common><scripts><generic_wizard>" & _
      "<WANT_DEBUG bool=""1"" /><DEBUG_NAME><str><![CDATA[Debug]]></str></DEBUG_NAME>" & _
      "<DEBUG_OUTPUT><str /></DEBUG_OUTPUT><DEBUG_OBJECTS_OUTPUT><str /></DEBUG_OBJECTS_OUTPUT>" & _
      "<WANT_RELEASE bool=""1"" /><RELEASE_NAME><str><![CDATA[Release]]></str></RELEASE_NAME>" & _
      "<RELEASE_OUTPUT><str /></RELEASE_OUTPUT><RELEASE_OBJECTS_OUTPUT><str /></RELEASE_OBJECTS_OUTPUT>" & _
      "</generic_wizard></scripts></CodeBlocksConfig>"
    .SaveToFile sConfFile, adSaveCreateOverWrite
    .Close
  End With
End Sub

Sub ChangeConf(ByRef sConfFile, ByRef sProjDir, ByRef sAIncludeDir, ByRef sMinGWDir, ByRef sOS, ByRef oADOR, ByRef oFSO)
  Dim oXmlDoc, oNode, oNodeItem, i
  Set oXmlDoc = CreateObject("Microsoft.XMLDOM")
  oXmlDoc.async = False
  oXmlDoc.validateOnParse = False
  oXmlDoc.resolveExternals = False
  oXmlDoc.load(sConfFile)
  If oXmlDoc.parseError.errorCode = 0 Then
    ' Pfad zu MinGW anpassen
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//compiler/sets/gcc/MASTER_PATH/str")
    If Not oNode Is Nothing Then oNode.parentNode.removeChild(oNode)
    Set oNodeItem = oXmlDoc.createNode(1, "str", "")
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//compiler/sets/gcc/MASTER_PATH")
    oNode.appendChild oNodeItem
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//compiler/sets/gcc/MASTER_PATH/str")
    Set oNodeItem = oXmlDoc.createCDATASection(sMinGWDir)
    oNode.appendChild oNodeItem
    ' Pfad zu Debugger anpassen
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//debugger_common/sets/gdb_debugger/conf1/values/EXECUTABLE_PATH/str")
    If Not oNode Is Nothing Then oNode.parentNode.removeChild(oNode)
    Set oNodeItem = oXmlDoc.createNode(1, "str", "")
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//debugger_common/sets/gdb_debugger/conf1/values/EXECUTABLE_PATH")
    oNode.appendChild oNodeItem
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//debugger_common/sets/gdb_debugger/conf1/values/EXECUTABLE_PATH/str")
    Set oNodeItem = oXmlDoc.createCDATASection(sMinGWDir & "\bin\gdb.exe")
    oNode.appendChild oNodeItem
    ' Default Projektpfad anpassen
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//project_manager/DEFAULT_PATH/str")
    If Not oNode Is Nothing Then oNode.parentNode.removeChild(oNode)
    Set oNodeItem = oXmlDoc.createNode(1, "str", "")
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//project_manager/DEFAULT_PATH")
    oNode.appendChild oNodeItem
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//project_manager/DEFAULT_PATH/str")
    Set oNodeItem = oXmlDoc.createCDATASection(sProjDir & "\")
    oNode.appendChild oNodeItem
    ' Pfad zu Includes anpassen
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//compiler/sets/gcc/INCLUDE_DIRS")
    If Not oNode Is Nothing Then oNode.parentNode.removeChild(oNode)
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//compiler/sets/gcc")
    Set oNodeItem = oXmlDoc.createElement("INCLUDE_DIRS")
    oNode.appendChild oNodeItem
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//compiler/sets/gcc/INCLUDE_DIRS")
    Set oNodeItem = oXmlDoc.createNode(1, "str", "")
    oNode.appendChild oNodeItem
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//compiler/sets/gcc/INCLUDE_DIRS/str")
    Set oNodeItem = oXmlDoc.createCDATASection(sMinGWDir & "\mingw\include;" & sAIncludeDir & ";")
    oNode.appendChild oNodeItem
    ' Pfad zu Libraries anpassen
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//compiler/sets/gcc/LIBRARY_DIRS")
    If Not oNode Is Nothing Then oNode.parentNode.removeChild(oNode)
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//compiler/sets/gcc")
    Set oNodeItem = oXmlDoc.createElement("LIBRARY_DIRS")
    oNode.appendChild oNodeItem
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//compiler/sets/gcc/LIBRARY_DIRS")
    Set oNodeItem = oXmlDoc.createNode(1, "str", "")
    oNode.appendChild oNodeItem
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//compiler/sets/gcc/LIBRARY_DIRS/str")
    Set oNodeItem = oXmlDoc.createCDATASection(sMinGWDir & "\mingw\lib;")
    oNode.appendChild oNodeItem
    ' Ausgabepfade anpassen
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//scripts/generic_wizard/DEBUG_OUTPUT/str")
    If Not oNode Is Nothing Then oNode.parentNode.removeChild(oNode)
    Set oNodeItem = oXmlDoc.createNode(1, "str", "")
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//scripts/generic_wizard/DEBUG_OUTPUT")
    oNode.appendChild oNodeItem
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//scripts/generic_wizard/DEBUG_OUTPUT/str")
    Set oNodeItem = oXmlDoc.createCDATASection("bin\Debug_x" & sOS & "\")
    oNode.appendChild oNodeItem
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//scripts/generic_wizard/DEBUG_OBJECTS_OUTPUT/str")
    If Not oNode Is Nothing Then oNode.parentNode.removeChild(oNode)
    Set oNodeItem = oXmlDoc.createNode(1, "str", "")
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//scripts/generic_wizard/DEBUG_OBJECTS_OUTPUT")
    oNode.appendChild oNodeItem
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//scripts/generic_wizard/DEBUG_OBJECTS_OUTPUT/str")
    Set oNodeItem = oXmlDoc.createCDATASection("obj\Debug_x" & sOS & "\")
    oNode.appendChild oNodeItem
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//scripts/generic_wizard/RELEASE_OUTPUT/str")
    If Not oNode Is Nothing Then oNode.parentNode.removeChild(oNode)
    Set oNodeItem = oXmlDoc.createNode(1, "str", "")
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//scripts/generic_wizard/RELEASE_OUTPUT")
    oNode.appendChild oNodeItem
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//scripts/generic_wizard/RELEASE_OUTPUT/str")
    Set oNodeItem = oXmlDoc.createCDATASection("bin\Release_x" & sOS & "\")
    oNode.appendChild oNodeItem
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//scripts/generic_wizard/RELEASE_OBJECTS_OUTPUT/str")
    If Not oNode Is Nothing Then oNode.parentNode.removeChild(oNode)
    Set oNodeItem = oXmlDoc.createNode(1, "str", "")
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//scripts/generic_wizard/RELEASE_OBJECTS_OUTPUT")
    oNode.appendChild oNodeItem
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//scripts/generic_wizard/RELEASE_OBJECTS_OUTPUT/str")
    Set oNodeItem = oXmlDoc.createCDATASection("obj\Release_x" & sOS & "\")
    oNode.appendChild oNodeItem
    ' Projects zu RECENT_PROJECTS hinzufügen
    If oADOR.RecordCount > 0 Then
      i = 0
      Set oNode = oXmlDoc.documentElement.selectSingleNode("//app/RECENT_PROJECTS/astr")
      If Not oNode Is Nothing Then oNode.parentNode.removeChild(oNode)
      Set oNodeItem = oXmlDoc.createNode(1, "astr", "")
      Set oNode = oXmlDoc.documentElement.selectSingleNode("//app/RECENT_PROJECTS")
      oNode.appendChild oNodeItem
      Set oNode = oXmlDoc.documentElement.selectSingleNode("//app/RECENT_PROJECTS/astr")
      oADOR.MoveFirst
      While Not oADOR.EOF And i < 20
        If oFSO.FileExists(oADOR("vcPath")) Then
          Set oNodeItem = oXmlDoc.createNode(1, "s", "")
          oNode.appendChild oNodeItem
          Set oNodeItem = oXmlDoc.createCDATASection(oADOR("vcPath"))
          oNode.childNodes(i).appendChild oNodeItem
          i = i + 1
        End If
        oADOR.MoveNext
      Wend
    End If
    oXmlDoc.save(sConfFile)
  Else
    MsgBox oXmlDoc.parseError.reason & vbLf & _
      "Der Pfad zu MinGW konnte in Datei" & vbLf & """" & sConfFile & """" & _
      vbLf & "nicht angepasst werden." & vbLf & _
      "Voraussichtlich kann Code::Blocks den Compiler nicht aufrufen.", _
      vbExclamation Or vbSystemModal, "Fehler"
  End If
End Sub

Sub UpdateCBProjFiles(ByRef sOS, ByRef oADOR, ByRef oFSO)
  Dim oXmlDoc, oNode, sProjFile
  If oADOR.RecordCount > 0 Then
    oADOR.MoveFirst
    Set oXmlDoc = CreateObject("Microsoft.XMLDOM")
    oXmlDoc.async = False
    oXmlDoc.validateOnParse = False
    oXmlDoc.resolveExternals = False
    While Not oADOR.EOF
      On Error Resume Next
      sProjFile = oADOR("vcPath")
      If oFSO.FileExists(sProjFile) Then
        oXmlDoc.load(sProjFile)
        If oXmlDoc.parseError.errorCode = 0 Then
          Set oNode = oXmlDoc.documentElement.selectNodes("//Project/Build/Target[@title='Debug']")(0).selectNodes("Option[@output]")(0)
          oNode.setAttribute "output", "bin/Debug_x" & sOS & "/" & oFSO.GetFileName(oNode.getAttribute("output"))
          oXmlDoc.documentElement.selectNodes("//Project/Build/Target[@title='Debug']")(0).selectNodes("Option[@object_output]")(0).setAttribute "object_output", "obj/Debug_x" & sOS & "/"
          Set oNode = oXmlDoc.documentElement.selectNodes("//Project/Build/Target[@title='Release']")(0).selectNodes("Option[@output]")(0)
          oNode.setAttribute "output", "bin/Release_x" & sOS & "/" & oFSO.GetFileName(oNode.getAttribute("output"))
          oXmlDoc.documentElement.selectNodes("//Project/Build/Target[@title='Release']")(0).selectNodes("Option[@object_output]")(0).setAttribute "object_output", "obj/Release_x" & sOS & "/"
          oXmlDoc.save(sProjFile)
        End If
      End If
      On Error Goto 0
      oADOR.MoveNext
    Wend
  End If
End Sub

Sub main()
  Dim CBDir, ProjDir, AdditionalIncludeDir, _
    oFSO, oWSH, oADOR, oXmlDoc, oNode, oProjDir, _
    sCBDir, sProjDir, sConfFile, sAIncludeDir, sMinGWDir, sAppdataDir, sOS, _
    arrPath, i, CompilerUpdate

  Set oFSO = CreateObject("Scripting.FileSystemObject")
  Set oWSH = CreateObject("WScript.Shell")
  Set oADOR = CreateObject("ADODB.Recordset")
  ' sicherstellen, dass das Ausgangsarbeitsverzeichnis dem Scriptverzeichnis entspricht
  oWSH.CurrentDirectory = oFSO.GetParentFolderName(WScript.ScriptFullName)
  ' ggf. xml erzeugen
  If Not oFSO.FileExists(sConfigXML) Then
    Do
      If MsgBox("Wählen Sie nachfolgend das Verzeichnis aus, " & _
        "in dem ""codeblocks.exe"" zu finden ist." & vbLf & _
        "Dieser Schritt wird wiederholt, wenn ""codeblocks.exe"" nicht " & _
        "in einem Unterverzeichnis relativ zu diesem Script liegt.", _
        vbOKCancel Or vbInformation Or vbSystemModal, "Code::Blocks - Verzeichnis") _
        = vbCancel Then WScript.Quit
      CBDir = GetRelFolder("Code::Blocks", BIF_RETURNONLYFSDIRS Or BIF_NONEWFOLDERBUTTON, oFSO)
    Loop While CBDir = ""
    Do
      If MsgBox("Wählen Sie nachfolgend das Verzeichnis aus, " & _
        "in dem Ihre Projekte gespeichert werden." & vbLf & _
        "Dieser Schritt wird wiederholt, wenn es sich nicht " & _
        "um ein Unterverzeichnis relativ zu diesem Script handelt.", _
        vbOKCancel Or vbInformation Or vbSystemModal, "Projects - Verzeichnis") _
        = vbCancel Then WScript.Quit
      ProjDir = GetRelFolder("Projects", BIF_RETURNONLYFSDIRS, oFSO)
    Loop While ProjDir = ""
    Do
      If MsgBox("Wählen Sie nachfolgend das Verzeichnis aus, " & _
        "in dem Sie weitere Dateien ablegen können, die Sie in Ihre Codes einbeziehen wollen." & vbLf & _
        "Dieser Schritt wird wiederholt, wenn es sich nicht " & _
        "um ein Unterverzeichnis relativ zu diesem Script handelt.", _
        vbOKCancel Or vbInformation Or vbSystemModal, "Additional_Include - Verzeichnis") _
        = vbCancel Then WScript.Quit
      AdditionalIncludeDir = GetRelFolder("Additional_Include", BIF_RETURNONLYFSDIRS, oFSO)
    Loop While AdditionalIncludeDir = ""
    CompilerUpdate = MsgBox("Möchten Sie, dass bei jedem Start überprüft wird, " & _
      "ob eine neue Version des Compilers verfügbar ist?" & vbLf & _
      "(Zu diesem Zweck werden Informationen aus dem Internet angefordert.)", _
      vbYesNoCancel Or vbQuestion Or vbSystemModal, "Versionsüberprüfung Compiler")
    If CompilerUpdate = vbCancel Then
      WScript.Quit
    ElseIf CompilerUpdate = vbYes Then
      CompilerUpdate = 1
    Else
      CompilerUpdate = 0
    End If
    CreateXMLFile CBDir, ProjDir, AdditionalIncludeDir, CStr(CompilerUpdate), oFSO
    MsgBox "Ihre Einstellungen wurden in """ & sConfigXML & _
      """ abgelegt und können nachträglich in den ""path""- bzw. ""check""-Attributen geändert werden.", _
      vbInformation Or vbSystemModal, sConfigXML
  End If
  ' Einstellungen aus xml lesen
  Set oXmlDoc = CreateObject("Microsoft.XMLDOM")
  oXmlDoc.async = False
  oXmlDoc.load(sConfigXML)
  If oXmlDoc.parseError.errorCode = 0 Then
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//relative_pathes/CBDir")
    CBDir = oNode.getAttribute("path")
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//relative_pathes/ProjDir")
    ProjDir = oNode.getAttribute("path")
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//relative_pathes/AdditionalIncludeDir")
    AdditionalIncludeDir = oNode.getAttribute("path")
    Set oNode = oXmlDoc.documentElement.selectSingleNode("//search_compiler_update")
    CompilerUpdate = CInt(oNode.getAttribute("check"))
  Else
    MsgBox "Fehler in Datei """ & sConfigXML & """" & vbLf & oXmlDoc.parseError.reason, _
      vbCritical Or vbSystemModal, "Fehler"
    WScript.Quit
  End If
  ' Projects Verzeichnis
  ProjDir = Trim(Replace(ProjDir, "/", "\"))
  If Not oFSO.FolderExists(ProjDir) Then
    arrPath = Split(ProjDir, "\")
    If (arrPath(0) = "" Or InStr(1, arrPath(0), ":", vbTextCompare) > 0) Then
      MsgBox "Der Pfad" & vbLf & """" & ProjDir & """" & _
        vbLf & "ist nicht relativ zum Script auflösbar." & vbLf & _
        "Ändern Sie den Pfad in " & sConfigXML & " entsprechend.", _
        vbExclamation Or vbSystemModal, "Fehler"
      WScript.Quit
    Else
      ProjDir = ""
      For i = 0 To UBound(arrPath)
        If arrPath(i) = "" Then Exit For
        ProjDir = ProjDir & arrPath(i)
        If Not oFSO.FolderExists(ProjDir) Then oFSO.CreateFolder(ProjDir)
        ProjDir = ProjDir & "\"
      Next
    End If
  End If
  sProjDir = oFSO.BuildPath(oWSH.CurrentDirectory, ProjDir) ' absoluter Pfad
  Set oProjDir = oFSO.GetFolder(sProjDir)
  sProjDir = oProjDir.Path
  ' Additional_Include Verzeichnis
  AdditionalIncludeDir = Trim(Replace(AdditionalIncludeDir, "/", "\"))
  If Not oFSO.FolderExists(AdditionalIncludeDir) Then
    arrPath = Split(AdditionalIncludeDir, "\")
    If (arrPath(0) = "" Or InStr(1, arrPath(0), ":", vbTextCompare) > 0) Then
      MsgBox "Der Pfad" & vbLf & """" & AdditionalIncludeDir & """" & _
        vbLf & "ist nicht relativ zum Script auflösbar." & vbLf & _
        "Ändern Sie den Pfad in " & sConfigXML & " entsprechend.", _
        vbExclamation Or vbSystemModal, "Fehler"
      WScript.Quit
    Else
      AdditionalIncludeDir = ""
      For i = 0 To UBound(arrPath)
        If arrPath(i) = "" Then Exit For
        AdditionalIncludeDir = AdditionalIncludeDir & arrPath(i)
        If Not oFSO.FolderExists(AdditionalIncludeDir) Then oFSO.CreateFolder(AdditionalIncludeDir)
        AdditionalIncludeDir = AdditionalIncludeDir & "\"
      Next
    End If
  End If
  sAIncludeDir = oFSO.BuildPath(oWSH.CurrentDirectory, AdditionalIncludeDir) ' absoluter Pfad
  sAIncludeDir = oFSO.GetFolder(sAIncludeDir).Path
  ' in CodeBlocks - Rootverzeichnis wechseln
  CBDir = Trim(Replace(CBDir, "/", "\"))
  If Not oFSO.FolderExists(CBDir) Then
    MsgBox "Der Pfad" & vbLf & """" & CBDir & """" & _
      vbLf & "existiert nicht." & vbLf & _
      "Ändern Sie den Pfad in " & sConfigXML & " entsprechend.", _
      vbExclamation Or vbSystemModal, "Fehler"
    WScript.Quit
  End If
  oWSH.CurrentDirectory = CBDir
  ' Compilerversion überprüfen
  If CompilerUpdate = 1 Then
    Const sURL = "https://www.administrator.de/wissen/codeblocks-portable-mingw-32-64-bit-windows-202510.html#toc-20", _
          sCompiler = "mingw64\bin\gcc.exe"
    Dim dCompDate
    If oFSO.FileExists(sCompiler) Then
      dCompDate = oFSO.GetFile(sCompiler).DateCreated
      If GetLastVersion > Year(dCompDate) & Right("0" & Month(dCompDate), 2) & Right("0" & Day(dCompDate), 2) Then
        If MsgBox("Es liegt eine neue Version des Compilers vor. Besuchen Sie" & vbLF & sURL & vbLF & _
            "und lesen Sie, wie Sie den Compiler updaten können." & vbLF & vbLF & _
            "Möchten Sie die Seite jetzt öffnen?", _
            vbYesNo Or vbInformation Or vbDefaultButton2 Or vbSystemModal, "Neue Compilerversion") = vbYes Then
          oWSH.Run sURL
        End If
      End If
    End If
  End If
  ' Prüfen ob codeblocks.exe existiert
  If Not oFSO.FileExists("codeblocks.exe") Then
    MsgBox """codeblocks.exe"" konnte nicht gefunden werden." & vbLf & _
      "Prüfen Sie den Pfad in """ & sConfigXML & """.", _
      vbCritical Or vbSystemModal, "Fehler"
    WScript.Quit
  End If
  ' Projects Dateien suchen und absteigend nach Datum sortieren (basierend auf *.layout Dateien)
  oADOR.Fields.Append "vcPath", adVarChar, 255
  oADOR.Fields.Append "vnDateLastMod", adVarNumeric, 8
  oADOR.Open
  GetAllProjects oProjDir, oADOR, oFSO
  If oADOR.RecordCount > 0 Then oADOR.Sort = "vnDateLastMod DESC"
  ' OS Architektur / Abfrage
  sOS = GetOSArchitecture
  If sOS = "64" Then
    If MsgBox("Sollen 64-Bit-Anwendungen erstellt werden?", _
      vbYesNo Or vbQuestion Or vbSystemModal, "Windows x64 detektiert.") _
      = vbNo Then sOS = "32"
  End If
  ' Pfade
  sCBDir = oWSH.CurrentDirectory ' resultiert zum absoluten Pfad
  sConfFile = oFSO.BuildPath(sCBDir, "AppData\codeblocks\default.conf")
  sMinGWDir = oFSO.BuildPath(sCBDir, "mingw" & sOS)
  sAppdataDir = oFSO.BuildPath(sCBDir, "AppData")
  ' Konfiguration anpassen
  If Not oFSO.FileExists(sConfFile) Then
    If Not oFSO.FolderExists(sAppdataDir) Then oFSO.CreateFolder(sAppdataDir)
    If Not oFSO.FolderExists(sAppdataDir & "\codeblocks") Then oFSO.CreateFolder(sAppdataDir & "\codeblocks")
    CreateConfFile sConfFile
  End If
  If sOS = "32" Then sOS = "86"
  ChangeConf sConfFile, sProjDir, sAIncludeDir, sMinGWDir, sOS, oADOR, oFSO
  ' APPDATA in der Prozessumgebung ändern
  oWSH.Environment("PROCESS")("APPDATA") = sAppdataDir
  ' Verschwommene Schrift in Code::Blocks 17.12 vermeiden
  oWSH.Environment("PROCESS")("__COMPAT_LAYER") = "~ HIGHDPIAWARE"
  ' Code::Blocks starten
  oWSH.Run "codeblocks.exe"
  ' Targets in allen Code::Blocks Projektdateien ändern
  UpdateCBProjFiles sOS, oADOR, oFSO
  oADOR.Close
End Sub

main
CodeBlocksPortable
    ├─ Additional_Include
    ├─ CodeBlocks
    │      ├─ mingw32
    │      ├─ mingw64
    │      ├─ share
    │      └─ (codeblocks.exe)
    │
    ├─ Projects
    └─ (CB-Portable-Launcher.vbs)
5.1.1. Script speichern - How To
Wie ich erfahren habe, fällt es manch einem schwer den Code aus dem Forum als VBScript abzuspeichern.
  • Rechts über dem Code gibt es den Link "Quelltext". Bei Mausklick öffnet sich ein neues Fester mit dem Code in Plaintext.
  • Den gesamten Code markieren ([Strg]+[A]) und kopieren ([Strg]+[C]).
  • Den Windows Editor öffnen. Bspw. so:
    • Tastenkombination [Windows]+[R],
    • notepad.exe in den geöffneten "Ausführen" Dialog schreiben,
    • OK anklicken.
  • Den kopierten Code einfügen ([Strg]+[V]).
  • Menü Datei -> Speichern unter...
  • In das CodeBlocksPortable Verzeichnis navigieren
  • Codierung auf ANSI stellen, Dateityp Alle Dateien (*.*) auswählen, Dateiname CB-Portable-Launcher.vbs

2bc762ffc93b1837c47c0db5dbae85b6 - Klicke auf das Bild, um es zu vergrößern

  • Speichern.

5.2. Der erste Start

Nun ist alles für den ersten Run bereit. Durch Doppelklick auf "CB-Portable-Launcher.vbs" wird das Script gestartet. Dieses prüft zunächst die Umgebung und wird feststellen, dass noch Dateien und Verzeichnisse fehlen. Kein Problem, du wirst durch die nächsten Schritte geführt.
Zunächst wirst du nach dem "CodeBlocks" Verzeichnis gefragt. Dieses wählst du aus und bestätigst. Das gleiche für die Verzeichnisse "Projects" und "Additional_Include".
Im letzten Popup wirst du gefragt, ob überprüft werden soll, ob eine neue Version des Compilers verfügbar ist. Bestätigst du mit Ja, wird bei jedem Start des Scripts das Erstellungsdatum der gcc.exe im mingw64 Verzeichnis, mit dem Datum im Dateiname der letzten *.7z Datei auf sourceforge.net verglichen. Sollte eine neue Version verfügbar sein, wirst du mit einem Popup darüber informiert. Für weitere Informationen, siehe unten im Punkt "Wie kann ich den Compiler auf aktuellem Stand halten?".

Code::Blocks öffnet sich nun und belästigt dich noch einmal damit den Default Compiler "GNU GCC Compiler" zu bestätigen.
Achtung! Diese Meldung ist ggf. hinter anderen geöffneten Fenstern versteckt, sodass es den Anschein hat, Code::Blocks würde nicht starten. Minimiere in diesem Fall nacheinander alle geöffneten Fenster (oder navigiere bei gehaltener [Alt] Taste mit [Tab] durch die Fenster) ...
(Diese Prozedur gibt es wirklich nur beim ersten Start.)

Geschafft! Nun kannst du endlich loslegen ...


6. Weitere Informationen

6.1. Wie funktioniert das Script eigentlich?

Code::Blocks benötigt die Datei "default.conf", ein XML File welches sämtliche Einstellungen der IDE enthält. Diese Datei würde normalerweise im AppData Verzeichnis deines Benutzerprofils angelegt werden. Das Script erstellt zunächst einen Prototyp dieser Datei unter "CodeBlocksPortable\CodeBlocks\AppData\codeblocks" und speichert dort die Lage des Compilers, deiner Projekte und weitere Einstellungen. Diese Einstellungen werden bei jedem Start durch das Script aktualisiert. Weiterhin wird die Umgebungsvariable %AppData% für den codeblocks.exe Prozess dahingehend geändert, dass Code::Blocks die so veränderte "default.conf" lädt statt in deinem Benutzerprofil zu suchen. Code::Blocks wird in dieser Umgebung gestartet und mutiert somit zur "Portable App".
Mit dem Update v. 07.12.2017 werden unterschiedliche Target-Pfade für x86 und x64 Programmdateien genutzt. Dazu werden zusätzlich zur Änderung der "default.conf" auch in sämtlichen Projektdateien (*.cbp) im "Projects" Verzeichnis die entsprechenden Target-Pfade aktualisiert. Das hat den Vorteil, dass es nicht zu Fehlern für nicht neu kompilierte Dateien für eine andere Prozessorarchitektur kommt, sowie dass Executables im "bin" Verzeichnis für unterschiedliche Prozessorarchitekturen auch in unterschiedlichen, entsprechend benannten Unterverzeichnissen gespeichert werden. Damit die Projektdateien aktualisiert werden können, müssen die Projekte aber bereits bei Start des Scripts im "Projects" Verzeichnis liegen. Projekte im Unterverzeichnis "_archive_" (siehe Punkt 3.) sind von dieser Aktualisierung ausgeschlossen.

6.2. Warum kann ich auf einem x86 System kein x64 Programm erstellen?

Der Compiler für 64-Bit-Applikationen ist selbst ein 64-Bit-Programm. Das läuft natürlich nicht auf einem 32-Bit System.
Umgekehrt funktioniert das aber. Du kannst 32-Bit-Programme unter einem 64-Bit Betriebssystem kompilieren. Aus diesem Grund fragt dich das Script auf einem 64-Bit System, welcher Compiler heran gezogen werden soll.

6.3. Warum wird mein bestehendes Projekt nicht neu kompiliert?

Code::Blocks prüft im Vorfeld, ob der Quellcode sich zum Stand der Object-Dateien geändert hat. Unveränderte Quelldateien werden nicht neu kompiliert. Das kann zu merkwürdigen Fehlermeldungen führen, wenn ein Projekt, das zuvor mit dem 32-Bit Compiler bearbeitet wurde, erneut über den 64-Bit Compiler läuft (oder auch umgekehrt).
Eine Neukompilierung lässt sich jedoch forcieren, indem man einfach auf "Neu erstellen" d3a34efa34cd89e564b2fbba1a9724d1 - Klicke auf das Bild, um es zu vergrößern klickt oder das "obj" Subverzeichnis aus dem Projektordner löscht.
Das Update des VBScripts v. 07.12.2017 sollte Fehler dieser Art aber weitestgehend ausschließen.

6.4. Warum sind die Linkeroptionen -static-libgcc und -static-libstdc++ voreingestellt?

MinGW erstellt normalerweise Applikationen mit Abhängigkeit zu dynamisch gelinkten Bibliotheken (im "bin" bzw. "lib" Verzeichnis des Compilers zu finden). Um zu vermeiden, dass diese DLLs bei jedem Programm mitgeliefert werden müssen, werden die entsprechenden Libraries statisch gelinkt.

6.5. Warum kennt der Compiler den C11 oder C++14 Standard nicht?

Unterschiedliche Compiler unterstützen die neuesten Standards mehr oder weniger vollständig. Auch MinGW hat längst nicht alles implementiert. Wenn jedoch gar keine der neuen Features nutzbar sind, dann liegt es vermutlich daran, dass die entsprechenden Compiler-Optionen nicht übergeben werden. Code::Blocks setzt diese nicht standardmäßig. Folgendes ist nötig:
    1. Menü "Settings" ("Einstellungen")
    2. "Compiler..."
    3. Ein neues Fenster öffnet sich mit dem übergeordneten Tab "Compiler settings"
    4. Untergeordneter Tab "Other Options" ("Andere Optionen")
    5. In die Textbox -std=c11 und -std=c++1y untereinander schreiben
    6. Mit OK bestätigen.

6.6. Wie kann ich den Compiler auf aktuellem Stand halten?

Eine automatische Updatefunktion ist mit VBScript kaum machbar. Du kannst aber ab und zu auf sourceforge.net nachschauen, ob es eine neue Version gibt. Wenn das so sein sollte, lösche die Verzeichnisse "mingw32" und "mingw64" aus dem "CodeBlocks" Unterverzeichnis. Verfahre dann wie in Punkt 4.2. beschrieben, um dieselben Verzeichnisse mit den neusten Versionen wieder hinzuzufügen.
Wenn du automatisch darüber informiert werden willst wenn eine neue Compilerversion verfügbar ist, ändere in der "CB-Portable-Config.xml" im Knoten search_compiler_update auf check="1" .


Änderungen:
  • 20.10.2018 Text: Downloadlink für codeblocks.mo angepasst.
  • 26.07.2018 Text: an geänderte Voraussetzungen der neusten Compilerversion angepasst
  • 02.01.2018 Script: Anpassung des Kompatibilitätslayers um verschwommene Schrift bei C::B 17.12 und High DPI Displays zu vermeiden.
  • 01.01.2018 Text: an geänderte Voraussetzungen der neusten Compiler- und IDE-Version angepasst
  • 08.12.2017 Text: Punkte 6.1. und 6.3. aktualisiert.
  • 07.12.2017 Script: Unterschiedliche Target-Pfade für x86 und x64 Programmdateien sollen Fehler bei der Kompilierung desselben Projekts für unterschiedliche Prozessorarchitekturen verhindern.
  • 30.12.2016 Text: an geänderte Voraussetzungen der neusten Compilerversion angepasst, Download der Datei codeblocks.mo angepasst.
  • 09.09.2016 Text: drangon.org scheint down zu sein, Verweis entfernt.
  • 08.08.2016 Text: Punkt 5.2. und 6.6. bzgl. Scriptänderung aktualisiert.
  • 08.08.2016 Script: Optionale Überprüfung der Compilerversion hinzugefügt.
  • 06.08.2016 Text: Punkt 4.2. Alternativdownload hinzugefügt.
  • 28.02.2016 Script: Kleinere Änderungen. Explizites Zerstören von Objekten entfernt (es ist davon auszugehen, dass der Garbagecollector das selbständig besser kann).
  • 25.02.2016 Script: Bugfix für relative Pfade, wenn das Arbeitsverzeichnis des Scripts das Rootverzeichnis des Laufwerks ist. (Danke @nrt4ipok !)
  • 07.02.2016 Script: SETTINGS_VERSION für Code::Blocks ab Ver. 16.01 aktualisiert. Support für _archive_ Verzeichnis hinzu.
  • 07.02.2016 Text: Punkt 2.1., 3. , 4.1. und 5.2. aktualisiert, Anleitung für C++14 Support entsprechend geändert, Anleitung für Compilerupdate hinzu.
  • 02.05.2015 Text: an geänderte Voraussetzungen der neusten Compilerversion angepasst
  • 29.12.2014 Text: Anleitung für C(++)11 Support hinzu
  • 29.11.2014 Text: an geänderte Voraussetzungen der neusten Compilerversion angepasst
  • 26.10.2014 Text: an geänderte Voraussetzungen der neusten Compilerversion angepasst, Visualisierung aktualisiert
  • 27.08.2014 Text: direkte Location der codeblocks.mo hinzu
  • 03.01.2014 Text: Punkt 3. ergänzt, Punkt 5.1.1. hinzu
  • 01.01.2014 Text: Abbildung und Beschreibung "Neu erstellen" hinzu
  • 07.12.2013 Text: an geänderte Voraussetzungen der neusten Compilerversion angepasst
  • 12.04.2013 Text: an geänderte Voraussetzungen der neusten Compilerversion angepasst
  • 02.03.2013 Script: Aktualisierung Debugger hinzugefügt

29 Kommentare
Mitglied: bugmenot2
22.03.2013 um 08:51 Uhr
Klasse Arbeit, funktioniert super.
Kleiner Hinweis noch, das vbs Script muss als Unicode gespeichert werden, sonst Fehlermeldung.
Ansonsten danke für die Mühe
Bitte warten ..
Mitglied: rubberman
22.03.2013, aktualisiert 23.03.2013
Hallo bugmenot2,

vielen Dank für dein Feedback Freut mich zu hören!

Ich habe mein Originalscript noch mal mit einem HEX-Editor geöffnet um zu prüfen ob es tatsächlich im Unicodeformat gespeichert ist. Fehlanzeige. Es ist ANSI (Windows 1252), so wie es die meisten Texteditoren per Default speichern.
Magst du noch die Fehlermeldung nebst Zeilennummer posten, damit ich der Sache auf den Grund gehen kann? Interessant wäre auch auf welchem OS du das getestet hast und ob du ggf. Zeichen in den Pfaden hast, die sich mit ANSI nicht mehr darstellen lassen, also breiter als 8 Bit sind.


Grüße
rubberman

EDIT:
Ich habe einfach mal ein paar gängige Zeichensätze getestet.
  • ANSI (CP 1252) Funktioniert (zumindest bei mir).
  • OEM (CP 850) Funktioniert, auch wenn Umlaute natürlich falsch dargestellt werden da die Interpretation als ANSI Zeichensatz ausgeführt wird.
  • UTF-16(LE) Funktioniert, wie auch von dir getestet.
  • UTF-16(BE) Script bricht mit Fehlermeldung "Ungültiges Zeichen" in Zeile 1, Zeichen 1 ab. Hier wird offensichtlich bereits über das Byte Order Mark gemeckert. VBScript unterstützt diesen Zeichensatz grundsätzlich nicht.
  • UTF-8 Funktioniert nicht. Hier gilt das gleiche wie für UTF-16 Big Endian.
Bitte warten ..
Mitglied: Friemler
24.10.2014, aktualisiert um 10:52 Uhr
Hallo rubberman,

ich benutze Die Lösung aus Deiner Anleitung jetzt schon seit längerem, habe es nur bisher vergessen, Dich dafür auch mal zu loben. Wirklich eine gute Arbeit und Du hältst sie sogar auf dem neuesten Stand. Danke dafür und weiter so! Solche Beiträge machen das Internet wertvoll.

Ich hätte ja auch noch gerne einen Stern vergeben, finde aber die Bewertungs-Smileys nicht...

Gruß
Friemler
Bitte warten ..
Mitglied: rubberman
24.10.2014, aktualisiert um 16:12 Uhr
Hallo Friemler.

Ich hätte ja auch noch gerne einen Stern vergeben, finde aber die Bewertungs-Smileys nicht...

Ach was, ich brauche keine Sternchen Feedback jeglicher Art freut mich viel mehr. So weiß ich, ob etwas (nicht nur für mich) funktioniert und nützlich ist und ob es etwas gibt, was ich optimieren könnte. Also danke dafür! (und du bekommst deshalb ein Sternchen von mir )

Grüße
rubberman
Bitte warten ..
Mitglied: 120263
31.01.2015 um 09:53 Uhr
Sehr geehrter Rubberman,
Danke erst einmal für Ihre Mühen, die Sie sich machen!

Ich habe ein Problem mit dem VB Script. Es fragt mich in einer Endlosschleife nach dem Verzeichnis, in dem die Code::Blocks exe liegt....? Was läuft da falsch? Können Sie mir da weiterhelfen?

Ich habe Code::Blocks auf einem 32GB USB Stick installiert.
Der Stick hat den Namen Code:BlocksPortable
Die Verzeichnisstruktur ist so angelegt, wie unter Punkt 4.3 zu sehen ist.

Freundlicher Gruß
Ralph Hoffmann
Bitte warten ..
Mitglied: rubberman
31.01.2015, aktualisiert um 12:51 Uhr
Hallo RalphHoffmann, willkommen im Forum.

[OT]
Es ist in Internetforen allgemein üblich, dass man sich duzt. Das ist keine Respektlosigkeit und hat auch nichts damit zu tun, wie man sich normalerweise Fremden gegenüber auf der Straße verhalten würde Ein freundliches "Hallo" gehört allerdings (zumindest in diesem Forum) nach wie vor zur Netiquette und wird gern gesehen.
[/OT]

Dass das Script beim ersten Start nach den Verzeichnissen fragt, ist normal. Es öffnet sich ein sogenannter "BrowseForFolder" Dialog, bei dem man die entsprechenden Verzeichnisse auswählen muss. Siehe dazu Punkt 5.2. Der Hintergrund dafür ist, dass man (wie in Punkt 3. angemerkt) durchaus auch andere Verzeichnisnamen verwenden könnte. Aus diesem Grund werden diese Einstellungen über dieses Benutzerinterface vorgenommen.

Das Script ist vielfach getestet ohne dass diese Problem jemals aufgetreten ist. Anhand der Fehlerbeschreibung kann ich leider auch keinen Grund für das Fehlverhalten erkennen.

Was kannst du tun:
  1. Öffne den Task-Manager, wechsle in den Tab "Prozesse" und beende alle "wscript.exe" und "codeblocks.exe" Prozesse, falls solche laufen.
  2. Navigiere im Explorer in das CodeBlocksPortable Verzeichnis. Falls dort die Datei CB-Portable-Config.xml bereits angelegt wurde, lösche diese. Wechsle in das CodeBlocks Unterverzeichnis und lösche dort das Verzeichnis AppData, sofern bereits vorhanden.
  3. Starte das Script CB-Portable-Launcher.vbs erneut und verfahre wie in Punkt 5.2. angegeben.
  4. Falls das nicht zum Erfolg führt, wiederhole das Beenden der Prozesse und das Löschen der XML Datei.
  5. Benenne alle Verzeichnisse und Unterverzeichnisse exakt so, wie in Punkt 4.3 zu sehen ist. (Der Name des Datenträgers ist übrigens nicht von Interesse, wichtig ist lediglich dass darin ein Hauptverzeichnis CodeBlocksPortable liegt, auf das die restliche Verzeichnisstruktur aufbaut.)
  6. Lege im Verzeichnis CodeBlocksPortable eine neue Textdatei an und speichere dort folgenden Inhalt:
<?xml version="1.0" encoding="Windows-1252" standalone="yes"?>
<!-- Einstellungen für CB-Portable-Launcher -->
<CB_Portable_Launcher_Config version="1">
	<relative_pathes description="Die path-Attribute geben die relativen Pfade an.">
		<CBDir path="CodeBlocks" description="Pfad zum CodeBlocks - Rootverzeichnis, RELATIV zum Script" />
		<ProjDir path="Projects" description="Pfad zum Projects - Rootverzeichnis, RELATIV zum Script" />
		<AdditionalIncludeDir path="Additional_Include" description="Pfad zum Additional_Include - Rootverzeichnis, RELATIV zum Script" />
	</relative_pathes>
</CB_Portable_Launcher_Config>
Benenne die Datei zu CB-Portable-Config.xml um. Nun starte das Script erneut.

Ich würde mich sehr über Feedback freuen, ob einer der Lösungsvorschläge funktioniert hat, oder ob du die Ursache für das Fehlverhalten herausfinden konntest. Danke!

Grüße
rubberman
Bitte warten ..
Mitglied: knirschke
19.12.2015 um 22:38 Uhr
Hallo rubberman,

das hast Du sehr gut gemacht.
Hat auf Anhieb geklappt...
Vielen Dank !

knirschke von zahnstein
Bitte warten ..
Mitglied: rubberman
21.12.2015, aktualisiert um 12:43 Uhr
Hallo knirschke,

danke für dein Feedback
Wenn dir was auffällt oder fehlt, melde dich bitte hier.

Grüße
rubberman
Bitte warten ..
Mitglied: nrt4ipok
24.02.2016, aktualisiert um 18:39 Uhr
Hallo RalphHoffmann

Hab das selbe Problem mit Win10 64 bit gehabt, gelöst durch ändern der Funktion "Right" in Zeile 39 von Script

alt:
        strRel = Right(strSelectedFolder, iDiff - 1)
neu:
        strRel = Right(strSelectedFolder, iDiff)
hatte aber auch danach ein komisches Fhänomen. Nach ersten Start + mehrfache Versuche da nix kam ... musste ich feststellen das es einfach nichts angezeigt wurde.
Lösung: mit ALT + TAB die CB Compilerauswahl selektieren.

ob Dies am OS liegt kann ich nicht beurteilen da ich bis heute noch nie was mit Windows-Programmierung zutun hatte.

Ich hoffe das hilft
Grüße
Bitte warten ..
Mitglied: rubberman
24.02.2016 um 21:48 Uhr
Hallo nrt4ipok, willkommen im Forum.

Leider hat sich der Benutzer RalphHoffmann hier im Forum abgemeldet. Ich fürchte wir werden nicht erfahren, ob dein Vorschlag für ihn hilfreich war.
Wie auch immer, ich bin über jegliches Feedback dankbar. Leider kann ich das Fehlverhalten des Scripts noch nicht nachvollziehen. Sobald ich die von dir vorgeschlagene Änderung vornehme, verändert sich der erzeugte Pfad dahingehend, dass der vorangestellte Backslash des Verzeichnisses erhalten bleibt. Beispiel:
aus
Additional_Include
wird
\Additional_Include

Nehmen wir an, das Verzeichnis hat folgenden absoluten Pfad:
D:\CodeBlocksPortable\Additional_Include
und das Script hat das Arbeitsverzeichnis
D:\CodeBlocksPortable
Dann würde
\Additional_Include
als
D:\Additional_Include
interpretiert, was aber nicht existieren würde.

Du wärst eine große Hilfe, wenn du mir die absoluten Pfade der Verzeichnisse schreiben könntest, bei denen das Script bei dir fehlgeschlagen ist. Vielleich gelingt es mir nachzustellen, woran es hapert. Ich möchte natürlich, dass das Script für alle Benutzer funktioniert und nicht nur für einen Teil

Grüße
rubberman
Bitte warten ..
Mitglied: nrt4ipok
25.02.2016 um 10:37 Uhr
Hallo rubberman,

Hier mein Code der Funktion GetRelFolder:
Function GetRelFolder(ByVal strMsg, ByVal iStyle, ByRef oFSO)
  Dim objFolder, strRel, strThisFolder, strSelectedFolder, iDiff
  strRel = ""
  strThisFolder = oFSO.GetParentFolderName(WScript.ScriptFullName)
  Set objFolder = CreateObject("Shell.Application").BrowseForFolder(0, _
    "Bitte wählen Sie das " & strMsg & "-Verzeichnis aus.", iStyle, strThisFolder)
  If Not objFolder Is Nothing Then
    strSelectedFolder = objFolder.Self.Path
    If InStr(1, strSelectedFolder, strThisFolder, vbTextCompare) = 1 Then
      iDiff = Len(strSelectedFolder) - Len(strThisFolder)
		If iDiff > 0 Then
        strRel = Right(strSelectedFolder, iDiff - 1)

MsgBox( _
	"strSelectedFolder(" & Len(strSelectedFolder) &")=" & strSelectedFolder & vbCrLf & _
	"strThisFolder(" & Len(strThisFolder) &")=" & strThisFolder & vbCrLf & _
	"iDiff=" & iDiff & vbCrLf & _
	"strRel=" & Right(strSelectedFolder, iDiff - 1) )

        If Not oFSO.FolderExists(strRel) Then strRel = ""
      End If
    End If
    Set objFolder = Nothing
  End If
  GetRelFolder = strRel
End Function
Ausgabe 1:
strSelectedFolder(13)=E:\CodeBlocks
strThisFolder(3)=E:\
iDiff=10
strRel=odeBlocks
Ausgabe 2:
strSelectedFolder(32)=E:\CodeBlocksPortable\CodeBlocks
strThisFolder(21)=E:\CodeBlocksPortable
iDiff=11
strRel=CodeBlocks

Und sofort sieht man den Fehler, und zwar bei "strThisFolder" wenn das Script im Rootverzeichnis des Lauftwerks ist.
So sieht dann die Funktion "GetRelFolder" gepatcht aus:
Function GetRelFolder(ByVal strMsg, ByVal iStyle, ByRef oFSO)
  Dim objFolder, strRel, strThisFolder, strSelectedFolder, iDiff
  strRel = ""
  strThisFolder = oFSO.GetParentFolderName(WScript.ScriptFullName)
  If Right(strThisFolder,1) = "\" Or Right(strThisFolder,1) = "/" Then
    strThisFolder = Left(strThisFolder,Len(strThisFolder) - 1)
  End If
  Set objFolder = CreateObject("Shell.Application").BrowseForFolder(0, _
    "Bitte wählen Sie das " & strMsg & "-Verzeichnis aus.", iStyle, strThisFolder)
  If Not objFolder Is Nothing Then
    strSelectedFolder = objFolder.Self.Path
    If InStr(1, strSelectedFolder, strThisFolder, vbTextCompare) = 1 Then
      iDiff = Len(strSelectedFolder) - Len(strThisFolder)
		If iDiff > 0 Then
        strRel = Right(strSelectedFolder, iDiff - 1)
        If Not oFSO.FolderExists(strRel) Then strRel = ""
      End If
    End If
    Set objFolder = Nothing
  End If
  GetRelFolder = strRel
End Function
Grüße
nrt4ipok
Bitte warten ..
Mitglied: rubberman
25.02.2016, aktualisiert um 19:26 Uhr
Hallo nrt4ipok.

wenn das Script im Rootverzeichnis des Lauftwerks ist
Hehe, ja genau das ist so auch nicht vorgesehen. Punkt 3 nicht gelesen, tse tse tse

Auf jeden Fall vielen Dank, dass du noch mal drüber geschaut hast. Sicherlich übernehme ich deinen Patch so oder leicht abgewandelt in das Script (nachdem ich getestet habe). Der Forward-Slash sollte sicher nicht vorkommen, da WScript.ScriptFullName einen Windows-Pfad mit Backslashes zurückgibt. Wahrscheinlich reicht es die Länge des absoluten Pfads zu prüfen. Ist sie 3, muss der Pfad auf 2 eingekürzt werden...

Danke nochmal! Diese Art von Feedback ist für mich besonders konstruktiv, denn man stolpert nicht unbedingt selbst über jeden Bug Dafür gibt's gleich mal ein Upvote von mir.

Grüße
rubberman

PS:
Nach ersten Start + mehrfache Versuche da nix kam ... musste ich feststellen das es einfach nichts angezeigt wurde.
Lösung: mit ALT + TAB die CB Compilerauswahl selektieren.

ob Dies am OS liegt kann ich nicht beurteilen da ich bis heute noch nie was mit Windows-Programmierung zutun hatte.
Mit Version 16.01 von Code::Blocks hatte ich diese Erscheinung das erste mal. Ich hatte daraufhin am 07.02.16 den Punkt 5.2. entsprechend ergänzt. Alt+Tab funktioniert natürlich alternativ zur Minimierung überdeckender Fenster. Mit dem OS sollte das allerdings nichts zu tun haben. Hier legt C::B das Child-Fenster einfach nicht korrekt in den Vordergrund ...
Bitte warten ..
Mitglied: Friemler
26.02.2016, aktualisiert um 10:28 Uhr
Hallo zusammen,

ich hätte da noch eine etwas kürzere alternative Version:

Function GetRelFolder(ByVal strMsg, ByVal iStyle, ByRef oFSO)
  Dim objFolder, strRel, strThisFolder, strSelectedFolder, iDiff

  strRel        = ""
  strThisFolder = oFSO.GetParentFolderName(WScript.ScriptFullName)

  Set objFolder = CreateObject("Shell.Application").BrowseForFolder(0, _
    "Bitte wählen Sie das " & strMsg & "-Verzeichnis aus.", iStyle, strThisFolder)

  If Not objFolder Is Nothing Then
    strSelectedFolder = objFolder.Self.Path

    If Left(strSelectedFolder, Len(strThisFolder)) = strThisFolder Then
      iDiff  = Len(strSelectedFolder) - Len(Trim(oFSO.BuildPath(strThisFolder, " ")))
      strRel = Right(strSelectedFolder, iDiff)
      If Not oFSO.FolderExists(strRel) Then strRel = ""
    End If

    Set objFolder = Nothing
  End If

  GetRelFolder = strRel
End Function

Grüße
Friemler
Bitte warten ..
Mitglied: nrt4ipok
26.02.2016 um 11:01 Uhr
Danke rubberman,
und sorry das ich eigendlich bei der Anleitung nur drüberflog. Dass mit Forward-Slash ist eine Linux Gewohnheit bei Path's.

Ein produktiven Feedback geb ich immer gern für eine gute Sache immerhin hast dir viel Muhe gemacht, DANKE dafür!


Danke Friemler,
dein Code funktioniert perfekt
... gleich in Ablage für CodeSchnipses hinterlegt
Trim(oFSO.BuildPath(strFolder, " "))
Grüße
nrt4ipok
Bitte warten ..
Mitglied: rubberman
26.02.2016 um 18:38 Uhr
Danke Leute!

Ich werde mir das gesamte Script am Wochenende nochmal zu Gemüte führen. Vielleicht kann ich noch etwas optimieren. Bei Scriptsprachen ist das mehr oder weniger eine Sache von "Trial and Error". Ein bisschen kann man vorausahnen. Bspw. wenn mehrfach die Länge desselben Strings festgestellt werden soll, wird ggf. auch mehrfach über den gesamten String iteriert um die Zeichen zu zählen. Bei Veränderungen am String könnten Speicherallokationen und Kopiervorgänge nötig werden, die Ressourcen fressen. Kürzerer Code muss dann also nicht zwangsläufig eine bessere Performance bedeuten. Trotzdem danke @Friemler, mal sehen was sich aus deinem Vorschlag übernehmen lässt

Grüße
rubberman
Bitte warten ..
Mitglied: Friemler
27.02.2016, aktualisiert um 07:38 Uhr
Moin rubberman!

Zitat von rubberman:

Kürzerer Code muss dann also nicht zwangsläufig eine bessere Performance bedeuten.

Da hast Du vollkommen Recht. Ich hatte in meinem Posting auch das falsche Adjektiv gewählt: "übersichtlicher" wäre die bessere Wahl gewesen, um meine dahinter steckende Motivation zu beschreiben. Ich finde das Herumgerechne mit String-Indizes meist schwer verständlich.

Ob allerdings im hiesigen konkreten Anwendungsfall von GetRelFolder Überlegungen zur Performance überhaupt notwendig sind, darüber ließe sich schon diskutieren...

Gruß
Friemler
Bitte warten ..
Mitglied: rubberman
27.02.2016, aktualisiert um 12:42 Uhr
Hallo Friemler.

"übersichtlicher"
Naja, den Pfad um einen Verzeichnisname bestehend aus einem Leerzeichen zu erweitern, das in derselben Funktionsverschachtelung wieder entfernt wird, könnte bei dem einen oder anderen auch eine Weile brauchen, bis angekommen ist, was der Sinn der Aktion sein könnte Aber grundsätzlich ist es schon so, dass die Lesbarkeit schwerer wird, wenn der Code in den Funktionen zu lang wird.
Da sich das Tut aber eher an C und C++ Entwickler richtet, vermute ich sowieso bei den meisten Benutzern eine Reaktion à la "VBS? WTF? Egal, Hauptsache ist, es funktioniert."

Ob allerdings im hiesigen konkreten Anwendungsfall von GetRelFolder Überlegungen zur Performance überhaupt notwendig sind, darüber ließe sich schon diskutieren...
Nein, darüber muss man nicht viel diskutieren. Dieser Teil des Scripts wird i.d.R. nur einmalig (öhm ... dreimalig) benötigt und da dort Benutzerinteraktion stattfindet, ist die Frage nach Performance hinfällig. Da gehe ich völlig d'accord.

Grüße
rubberman
Bitte warten ..
Mitglied: dome-xx
07.10.2016 um 17:52 Uhr
Hay Rubberman,

danke für diese super Anleitung. Jedoch habe ich das Problem, dass wenn ich zb. das bekannte Hello World Programm erstellen will, gebe ich das ein:

/* Das Hello-World-Programm */
2
3 #include <stdio.h>
4
5 int main()
6 {
7 printf("Hello World!\n");
8
9 return 0;
10 }


danach Speicher ich das ab in Projects. Danach klicke ich auf erstellen und Starten und dann kommt immer wieder:
Es sieht so aus als ob die Datei noch nicht erstellt worden ist. Möchten Sie die Datei jetzt erstellen?

Klicke ich auf Ja kommt die gleiche Meldung wieder. Klicke ich auf nein startet ein cmd Fenster das ich dann sofort beenden kann.
Ich hoffe du kannst mir helfen

Liebe Grüße

Dome
Bitte warten ..
Mitglied: rubberman
07.10.2016 um 19:17 Uhr
Hallo Dome.

Sieht aus als ist das dein erster Versuch überhaupt Es ist ohne weitere Informationen kaum möglich genau zu sagen, an was es liegt. Also starte mal einen komplett neuen Versuch.
  • CB-Portable-Launcher.vbs starten
  • Im Startfenster auf "Ein neues Projekt erstellen" klicken
  • Im Popupfenster "Console application" auswählen und auf "Go" klicken.
  • "C" auswählen und "Next" klicken.
  • Bei Project title z.B. HelloWorld eingeben und "Next" klicken.
  • "Finish" klicken.
  • Im Menü "Ansicht" Haken setzen bei
    • Manager
    • Logs
    • Statuszeile
  • Links im Manager Sidebar den Tab "Projekte" auswählen.
  • Dort "Arbeitsbereich"->"HelloWorld"->"Quellen" aufklappen und "main.c" doppelklicken.
  • Im Editorfenster rechts sollte nun bereits ein Hello World Code als Vorlage zu finden sein.
  • Auf Erstellen (Zahnrad-Symbol) klicken.
  • Sollten nun unten im "Logs & others" Fenster Fehlermeldungen erscheinen, bitte kopieren und hier posten
  • Falls nicht, sollte das Projekt erstellt worden sein und du kannst das Programm mit Klick auf Ausführen (grünes Dreieck) starten.

Was noch schief gegangen sein könnte:
- Falls du deine oben geposteten Zeilen samt Zeilennummern im Code stehen hast, geht's in die Hose. Die gehören nicht in einen C-Code.
- Dein Virenscanner könnte das Programm als sogenanntes "False Positive" erkannt haben und blockiert die Ausführung. Zum Test, schalte deinen Virenscanner vorübergehend aus und probiere noch einmal das Projekt zu erstellen.

Grüße
rubberman
Bitte warten ..
Mitglied: Friemler
07.10.2016, aktualisiert um 21:50 Uhr
Hallo rubberman,

Dein letzter Punkt (Virenscanner) könnte wirklich die Ursache sein, wenn man den Avira Virenschutz verwendet.

Ich habe bei mir hier die Free-Version des Tools laufen. Jedes Mal wenn ich mit CodeBlocks bzw. MinGW ein Programm als Debug-Build erstelle schlägt Avira Alarm, aber erst seit einigen Wochen. Zur Zeit wird das Muster "TR/Dropper.Gen" (ein generisches Muster) gemeldet, ich habe aber auch schon andere Meldungen erhalten. Wenn ich ein Release-Build erstelle gibt es keine Probleme.

Ich habe über die Rückmeldefunktion des Virenschutz-Tools schon 3 Meldungen abgesetzt mit dem Hinweis "False Positive", was mir von Avira auch bestätigt wurde. Außerdem wollten sie das Erkennungsmuster aus ihrer Datenbank entfernen. Beim nächsten Compilieren kam allerdings lediglich eine andere Meldung.

@dome-xx: Schalte die Build-Konfiguration mal auf Release und teste dann nochmals.

[EDIT]
Ich nutze MinGW 6.1.0
[/EDIT]

Grüße
Friemler
Bitte warten ..
Mitglied: rubberman
07.10.2016 um 22:00 Uhr
Hallo Friemler,

ist mir noch gar nicht aufgefallen. Kompiliere sowieso meistens im Release Modus. Ich kann mich aber erinnern, dass Release Builds in der Vergangenheit tendenziell häufiger angemeckert wurden. Scheint sich ja nun geändert zu haben

Grüße
rubberman
Bitte warten ..
Mitglied: dome-xx
10.10.2016 um 18:56 Uhr
Hay Rubberman,

ja es war mein erster Versuch überhaupt und es lag daran, dass ich kein Project erstellt habe.
Jetzt läuft alles super.
Danke für deine Hilfe
Ich hoffe, dass ich dich bei sonstigen Fragen weiter um Rat fragen kann.

Liebe Grüße

Dome
Bitte warten ..
Mitglied: rubberman
11.10.2016 um 00:15 Uhr
Hallo Dome.

Ich hoffe, dass ich dich bei sonstigen Fragen weiter um Rat fragen kann.
Wenn es mit meiner Anleitung zu tun hat, dann gerne hier. Für Themen die C oder C++ betreffen solltest du aber alle Mitglieder ansprechen, indem du ein neues Thema im Forum eröffnest. Eines der Vorteile eine Forums ist, dass nicht nur einer allein sein Wissen weitergibt

Grüße
rubberman
Bitte warten ..
Mitglied: TheBattleWolf
24.11.2016 um 19:08 Uhr
Hallo koenntest du mir erklaeren wie man in der portablen Version den style aender als z.B zum Vim style und es sollte nach moeglichkeit auch auf anderen PC so bleiben?

Vielen Dank
-Wolf
Bitte warten ..
Mitglied: rubberman
24.11.2016 um 21:50 Uhr
Hallo Wolf

Sorry, aber als Pragmatiker sind mir Dinge wie das Erscheinungsbild der IDE reichlich egal (falls du mit "Style" darauf abzielen solltest). Unter Menü "Einstellungen" -> "Editor..." kannst du Einstellungen dahingehend vornehmen.
Wenn du statt dessen auf eine Vim - ähnliche Funktionsweise der IDE abzielst, dann verweist mich Google auf dieses Plugin.

Grüße
rubberman
Bitte warten ..
Mitglied: TheBattleWolf
24.11.2016 um 22:06 Uhr
http://wiki.codeblocks.org/index.php/Syntax_highlighting_custom_colour_ ...

In dieser Anleitung wird beschrieben wie man andere styles hinzufügt(einfach mal in den Punkt Installation schauen) und hier wird beschrieben das man die colour_themes.conf Datei abändert die wird allerdings lokal gespeichert und du hast es ja mit deinem script geschafft die default.conf portabel zu machen ginge das noch auch mit dieser Datei z.B durch ergänzen des VBS (so wie du es unter 6.1 beschrieben hättest) währe nett wenn du mir helfen könntest.
Bitte warten ..
Mitglied: rubberman
24.11.2016, aktualisiert um 23:28 Uhr
Hallo Wolf

Das ist nicht besonders schwierig, denn auch diese Einstellungen landen in der default.conf.
Schließe Code::Blocks, gehe im Explorer nach
CodeBlocksPortable\CodeBlocks\AppData\codeblocks
und öffne die default.conf mit einem Texteditor. Dort suchst du nach dem <editor> Tag und ersetzt dort alles von <colour_sets> bis </colour_sets> mit dem Code von <colour_sets> bis </colour_sets> aus dem "Installation" Abschnitt der verlinkten Seite. Speichern, das war's. (Mach aber sicherheitshalber vorher ein Backup der Datei ...)
Nun startest du das VBScript, wenn sich Code::Blocks geöffnet hat, gehst du im Menü "Einstellungen" -> "Editor...", klickst links auf "Syntax Hervorhebung", wählst oben dein Farbthema und klickst unten auf OK.
vimstyle - Klicke auf das Bild, um es zu vergrößern

Grüße
rubberman
Bitte warten ..
Mitglied: TheBattleWolf
25.11.2016 um 13:30 Uhr
Super hat gut geklappt echt spitzen Arbeit!
Vielen Dank!

-Wolf
Bitte warten ..
Mitglied: lutwin52
04.08.2019 um 19:20 Uhr
Danke, hab selten eine so gute Anleitung gehabt. Hat auf Anhieb geklappt.
Eigentlich wollte ich CodeBlocks nur auf deutsch haben.
Nun ist es auch in meiner PortableApps-Sammlung. Super!
Bitte warten ..
Ähnliche Inhalte
LAN, WAN, Wireless

DD-WRT: MAC-Filter kann max. 64-Adressen verwenden

Erfahrungsbericht von PedantLAN, WAN, Wireless11 Kommentare

Hallo liebe Kollegen, wenn sich GUI-Designer und Programmierer nicht unterhalten passiert Folgendes: Im Webinterface von dd-wrt kann man in ...

Windows Tools

Windows Datenträgerverwaltung buggy! (Windows Vista bis Windows 10)

Erfahrungsbericht von LochkartenstanzerWindows Tools

Moin, Ich habe eine Testkiste mit diversen Windows-Versionen + Ubuntu im Multiboot drauf. Gestern habe ich an den Partitionen ...

Windows 10

Theoretisches dauerhaftes Abschalten von Windows-Updates (Windows 10)

Tipp von beidermachtvongreyscullWindows 105 Kommentare

Moin Kollegen, ich weiß, ich weiß, nur ein Wahnsinniger sperrt Windows-Updates, aber dennoch gibt es Gründe, Windows 10 auf ...

Microsoft

Windows-Update-Troubleshooter

Information von kgbornMicrosoft

Kurze Information für Leute, die Probleme mit Windows Updates haben. Microsoft hat seine Webseite zum Beheben von Windows Update-Fehlern ...

Neue Wissensbeiträge
Sicherheit
0-day Schwachstelle im Internet Explorer
Information von kgborn vor 1 TagSicherheit

In Microsofts Internet Explorer gibt es eine 0-day Schwachstelle in der Scripting Engine, die faktisch alle Browser- und Windows-Versionen ...

Internet

Internet-Speedtest Automatisieren via Befehlszeile, cmd, Bash (Windows, Linux, FreeBSD, Mac)

Tipp von anteNope vor 1 TagInternet3 Kommentare

Also das hier ist irgendwie an mir vorbeigegangen. Einfacher geht es schlicht nicht mehr. Speedtest.cmd Via Aufgabenplanung stündlich oder ...

Administrator.de Feedback

Entwicklertagebuch: Codeblöcke auf unseren Seiten

Information von admtech vor 2 TagenAdministrator.de Feedback8 Kommentare

Hallo Administrator User, Unsere Codeblöcke werden ab sofort anders dargestellt. Die Codeblöcke können nun direkt per Copy&Paste kopiert werden. ...

Humor (lol)
Internet - auch 2020 noch Neuland ?
Erfahrungsbericht von Henere vor 2 TagenHumor (lol)6 Kommentare

Heute eine Mail der Schule meiner Tochter bekommen. Blabla Umweltschutz bla bla siehe Anhang. Dumm nur: Da hab ich ...

Heiß diskutierte Inhalte
Webbrowser
Kann Firefox von Google Suche nicht befreien
Frage von RG2525Webbrowser16 Kommentare

Hallo, Das passiert jetzt in letzter Zeit auf mehreren Computern von mir, dass die Google Suche sich nicht ausschalten ...

Windows Userverwaltung
Laptop WAKE ON LAN problem
Frage von WhatEver007Windows Userverwaltung9 Kommentare

Hallo, wie oben beschrieben geht es um wake on lan. Wenn ich auf meinen Netzwerkadapter gehe sehe ich keine ...

Peripheriegeräte
Datenstrom Drucker
Frage von FragefuchsPeripheriegeräte9 Kommentare

Moin, kann mir jemand sagen, wie Computer Daten an einen Drucker weitergeben? Gibt es dafür ein Protokoll oder Format? ...

Sicherheits-Tools
Passwort Manager mit AD anbindung und dt. Oberfläche
gelöst Frage von sani007Sicherheits-Tools9 Kommentare

Hallo Ich suche kostengünstigen Passwort Manager mit AD-Anbindung mit weboberfläche. Am besten mit VM-Image zur schnellen Installation. Wenn es ...