Das Ausführen eines C++-Programms (Das Ausführen eines C++-Programms), Lektion, Seite 722587
https://www.purl.org/stefan_ram/pub/ausfuehren_c++ (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram

Das Ausführen eines C++ -Programms mit TDM GCC 5.1.0  unter Windows 

Leider fehlte noch die Zeit, um diese Lektion zum Thema der Bedienung eines Compilers ausführlicher auszuarbeiten.

Im Unterrichtsraum wird der Dozent den Teilnehmern eines Kurses die Bedienung des vorhandenen Compilers so lange erklären, bis jeder damit zurechtkommt, und eventuelle Fragen zur Bedienung beantworten.

Außerhalb eines Unterrichts könnte es nötig werden, etwas in der Bedienungsanleitung des verwendeten Compilers zu lesen, um die Bedienung zu erlernen.

TDM GCC 5.1.0 

TDM GCC 5.1.0  ist ein Software-Paket, das einen C++-Compiler enthält.

Finden der Software im Web

TDM GCC 5.1.0  kann durch eine Suchanfrage wie [MinGW GCC 5.1 zip] gefunden werden. Beispielsweise konnte man damit die folgende URI finden.

URI
http://tdm-gcc.tdragon.net/download

Installation

Die Installation kann durch ein Installationsprogramm erfolgen. Hierbei ist darauf zu achten, die für das verwendete Betriebssystem (32- oder 64-Bit) passende Version auszuwählen.

Die Installation ist auch ohne Administratorkonto möglich und scheint auch den Suchpfad des Benutzers selbständig korrekt zu erweitern.

Der Aufruf

Nach der Installation ist eine Quelldatei »main.cpp« mit dem C++-Quelltext anzulegen und danach der Compiler wie folgt aufzurufen.

Einfache Kommandozeile zum Compilieren
c++ -std=c++17 main.cpp
Kommandozeilem mit diversen Optionen (nur als Beispiele)

c++ -std=c++17 -msse2 -march=native -Ofast -O3 -g -pedantic -pedantic-errors -Werror=narrowing -Wall -W -Wconversion -Wextra -Weffc++ -Wno-parentheses -pthread -lpthread -D_GLIBCXX_DEBUG -D__USE_MINGW_ANSI_STDIO -Wno-unused-parameter -Wno-unused-variable -Wno-empty-body -Wno-unused-but-set-variable main.cpp

c++ -std=c++17 -msse2 -march=native -Ofast -O3 -fgcse -fgcse-las -pedantic -pedantic-errors -Werror=narrowing -Wall -W -Wconversion -Wextra -Weffc++ -Wno-parentheses -D__USE_MINGW_ANSI_STDIO -Wno-unused-parameter -Wno-unused-variable -Wno-empty-body -Wno-unused-but-set-variable -Wstrict-overflow=5 -Wsuggest-attribute=pure -Wsuggest-attribute=const -Wsuggest-attribute=noreturn -Wsuggest-attribute=format -Wmissing-format-attribute -Wsuggest-final-types -Wsuggest-final-methods -Wsuggest-override -Warray-bounds=2 -Wwrite-strings -Werror=zero-as-null-pointer-constant main.cpp 1>transcript.txt 2>&1

Nach erfolgreicher Kompilierung entsteht »a.exe« und kann durch Eingabe des Namens gestartet werden. Der Name lehnt sich an den Namen des Kompilats unter UNIX an: »a.out« steht dort für „assembler output “.

Erweiterung des Suchpfades

Damit der Compiler »c++« aufgerufen werden kann, muß der Pfad des bin-Verzeichnis der Installation (also des oben hergestellten Verzeichnisses) zur Suchpfadliste des Kommandozeileninterpretierers hinzugefügt werden.

Dies ist nur dann nötig, wenn es nicht schon durch das Installationsprogramm erledigt wurde, was daran erkannt werden kann, daß »c++« als „unbekanntes Kommando“ angesehen wird.

Dabei ist in dem folgenden Beispiel »C:\example\bin« durch das tatsächliche bin-Verzeichnis der Installation zu ersetzen.

Kommandozeile zum Erweitern der Suchpfadliste (ungetestet)
set "PATH=%PATH%;C:\example\bin"
(an Stelle von »C:\example\bin« den Pfad des bin-Verzeichnisses einsetzen)

Autohotkey

Autohotkey ist ein Programm, das die Arbeit durch Bereitstellung von Tastaturkürzeln erleichtern kann, aber nicht unbedingt benötigt wird.

In diesem Abschnitt finden sich einige Notizen dazu.

AutoHotkey.cmd
Start AutoHotkey.exe AutoHotkey.txt
AutoHotkey.txt

run_java_main() {
SetTitleMatchMode 3
IfWinExist, %A_WinDir%\system32\cmd.exe
WinClose
IfWinExist, %A_WinDir%\system32\cmd.exe
WinClose
SetTitleMatchMode RegEx
IfWinExist, i)main\.cpp - (Editor|Notepad)
WinActivate
Else
Run %A_WinDir%\notepad.exe %A_MyDocuments%\homeqcp\main.cpp
Send ^s
Run "%A_MyDocuments%\homeqcp\Main.cmd",%A_MyDocuments%\homeqcp
Return
}

^R::
run_java_main()
Return

^E::
SetTitleMatchMode RegEx
IfWinExist, i)main\.cpp - (Editor|Notepad)
WinActivate
Else
Run %A_WinDir%\notepad.exe %A_MyDocuments%\homeqcp\Main.cpp,,Max
Return

^H::
SetTitleMatchMode 2
IfWinExist, homeqcp
WinActivate
Else
Run %A_WinDir%\explorer.exe /n`,/e`, %A_MyDocuments%\homeqcp,,Max
Return

^Z::
Send ^c
SetTitleMatchMode RegEx
IfWinExist, i)main\.cpp - (Editor|Notepad)
WinActivate
Else
{
Run %A_WinDir%\notepad.exe %A_MyDocuments%\homeqcp\Main.cpp,,Max
sleep, 999
}
sleep, 99
Send ^a
Send ^v
run_java_main()
Return

^B::
Send ^c


SetTitleMatchMode RegEx
IfWinExist, i)main\.cpp - (Editor|Notepad)
WinActivate
Else
{
Run %A_WinDir%\notepad.exe %A_MyDocuments%\homeqcp\Main.cpp,,Max
sleep, 999
}
sleep, 99
Send ^a
SendInput {#}include <iostream>{enter}{#}include <ostream>{enter}{#}include <string>{enter}{enter}using namespace ::std::literals;{enter}{enter}int main() {{} ::std::cout <<
Send ^v
Send {space} << "\n"s; {}}
run_java_main()
Return

^D::Run, cmd /c start Firefox https://docs.oracle.com/javase/8/docs/api/,,Max

^O::
Run, cmd /c start Firefox http://www.google.de,,Max
Return

:*?:qpp::
SendInput ::std::cout << 0 << "\n"s;
return

Alternative Optionen zur Optimierung *

[V] Folgende Befehle beim Compiler-Aufruf hinzufügen
-mwindows -msse2 -march=native -Ofast -O3 -std=c++17 -pedantic -pedantic-errors -Werror=narrowing -Wall -W -Wconversion -Wextra -Weffc++ -Wno-parentheses -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -pthread -g -lpthread -D_GLIBCXX_DEBUG -D__USE_MINGW_ANSI_STDIO 
[V] Folgende Befehle beim Compiler-Aufruf hinzufügen
-msse2 -march=native -Ofast -O3 -std=c++17 -pedantic -pedantic-errors -Werror=narrowing -Wall -W -Wconversion -Wextra -Weffc++ -Wno-parentheses -Wno-unused-parameter -Wno-unused-variable -pthread

Verwendung unter cmd  (Windows ) *

(So ähnlich erfolgreich erprobt in Unterrichtsräumen in Reinickendorf und Pankow im Februar 2016.)

Konsole oder cmd-Datei
set "PATH=%PATH%;C:\Program Files (x86)\Dev-Cpp\MinGW64\bin\g++.exe"
g++ -m32 main.c
a
PAUSE

Der Pfad am Ende der ersten Zeile kann bei jeder Installation anders lauten. Dies muß der Ordner mit dem Compiler »g++« sein.

Unter Umständen muß oder kann die Option »-m32« auch entfallen.

Statt »g++« kann manchmal auch »C++« geschrieben werden.

Hinter »g++« können auch noch die weiter oben angegebenen Optionen (»-O3 …«) geschrieben werden.

Verwendung unter Linux  *

Abfragen der Linux -Version.

Konsole
uname -or
3.2.0-4-amd64 GNU/Linux
cat /etc/debian_version
7.9

Prüfen, ob der Compiler schon installiert wurde.

Konsole
which g++
/usr/bin/g++

Version ermitteln.

Konsole
ls -l /usr/bin/gcc
/usr/bin/gcc -> gcc-4.7

Nach anderen Versionen suchen

Konsole
ls -l /usr/bin/gcc*

/usr/bin/gcc -> gcc-4.7

/usr/bin/gcc-4.6

/usr/bin/gcc-4.7.

Version des Compilers anzeigen lassen:

Konsole
gcc --version
gcc (Debian 4.7.2-5) 4.7.2
gcc-4.6 --version
gcc-4.6 (Debian 4.6.3-14) 4.6.3

Compiler aufwendig suchen lassen:

Konsole
find / -name "gcc*"

Ein C++ -Programm »main.cpp« schreiben.

Konsole
echo '#include <iostream>' >main.cpp
echo 'int main()' >>main.cpp
echo '{ ::std::cout << "Hallo, Welt!" << "\\n"; }' >>main.cpp
cat main.cpp
#include <iostream>
int main()
{ ::std::cout << "Hallo, Welt!" << "\n"; }

Aus dem C++ -Programm »main.cpp« eine ausführbare Datei »./a.out« machen.

Konsole
g++ main.cpp

Die ausführbare Datei »./a.out« starten.

Konsole
./a.out
Hallo, Welt!

Aus dem C++ -Programm »main.cpp« eine ausführbare Datei »./a.out« machen und dabei die oben empfohlenen Optionen verwenden. (Bei älteren Compilern muß »c++14« durch »c++11« ersetzt werden. Bei noch älteren Compilern müßte »-std=c++14« ganz weggelassen werden.)

Konsole

g++ -O3 -std=c++11 -g -pedantic -pedantic-errors -Werror=narrowing -Wall -W -Wconversion -Wextra -Weffc++ -Wno-parentheses -pthread -lpthread -D_GLIBCXX_DEBUG -D__USE_MINGW_ANSI_STDIO -Wno-unused-parameter -Wno-unused-variable main.cpp

./a.out

Hallo, Welt!

Die Installation (veraltete Anleitung) *

Diese Anleitung braucht bei Verwendung des Installationsprogramms nicht berücksichtigt zu werden.

Die folgenden vier Zip-Archive sollten in der unten gegebenen Reihenfolge alle in dasselbe Verzeichnis entpackt werden. Zuvor entpackte Dateien sollten dabei eventuell durch später entpackte Dateien überschrieben werden.

Auf der Seite »http://tdm-gcc.tdragon.net/download« finden sich viele Dateinamen, die den unten angegebenen Dateinamen zum Verwechseln ähnlich aussehen. Es ist darauf zu achten, genau die unten angegebenen Dateien zu kopieren! Die Ursache merkwürdiger Fehlermeldungen könnte darin bestehen, daß nicht zusammenpassende Archive kopiert wurden.

ZIP 0

gcc-5.1.0-tdm64-1-core.zip

heanet.dl.sourceforge.net/project/tdm-gcc/TDM-GCC%205%20series/5.1.0-tdm64-1/gcc-5.1.0-tdm64-1-core.zip

Auch für C  notwendig
ZIP 1

binutils-2.25-tdm64-1.zip

heanet.dl.sourceforge.net/project/tdm-gcc/GNU%20binutils/binutils-2.25-tdm64-1.zip

rüberkopieren
Auch für C  notwendig
ZIP 2

mingw64runtime-v4-git20150618-gcc5-tdm64-1.zip

freefr.dl.sourceforge.net/project/tdm-gcc/MinGW-w64%20runtime/GCC%205%20series/mingw64runtime-v4-git20150618-gcc5-tdm64-1.zip

rüberkopieren
Auch für C  notwendig
ZIP 3

gcc-5.1.0-tdm64-1-c++.zip

vorboss.dl.sourceforge.net/project/tdm-gcc/TDM-GCC%205%20series/5.1.0-tdm64-1/gcc-5.1.0-tdm64-1-c%2B%2B.zip

rueberkopieren
Nur für C++  notwendig

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722587 stefan_ram:722587 Das Ausführen eines C++-Programms Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722587, slrprddef722587, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/ausfuehren_c++