"hallo welt" unter Linux
-
HILFE,
ich hab eine hallo.cpp, mittlerweile auch daraus ein hallo.o und nun auch ein hallo.exe, das hat mich nun alle meine Nerven gekostet und erst mal den ganzen Tag heute, ich hab drei Tutorials zu Makefiles durchgelesen aber jetzt komm ich nicht weiter.Ich hab das hallo.exe da, aber kann das Ding nun nicht mal starten, er meint dauernd, er ich haette keine Berechtigung dazu, die hab ich allerdings auch nicht als root, dann erkennt er dann naemlich die Application nicht als solche. Dann chmod-et er mir auch das file nicht um in zB 777 sd es geht nur 775 usw, liegt das auch am Makefile?
Da ich vorher schon gemerkt hab mit dem Befehl "make hallo" macht er mir irgendwas namens hallo, befuerchte ich dieses auch obwohl ich einfach nur make eingegeben hab. (das Prg sollte einfach nur das bekannte "Hallo Welt" Prg sein).
--> Kann mir vielleicht hier jemand bitte helfen und einfach ein .cpp File eines "hallo Welt" Prgs mit Makefile und den dazugehoerigen Aufrufen posten, danke.
-
#include <iostream> // hallo.cpp int main() { std::cout << "Hello world!"; }
g++ -o hallo hallo.cpp
Aufrufen kannst Du Dein Programm dann per "./hallo", bei nur einer Source-Datei wäre ein Makefile wohl nicht rasend sinnvoll...
-
wieso exe? hmm
-
Vielen Dank,
noch eine erweiterung der Frage haette ich anzubieten, denn ich hatte auch schon mal gehoert, das man ein einziges File auch mir einem einzigen Befehl an den gcc oder g++ erledigen koennte, allerdings hatte ich angefangen mit einem Codefile code.cpp und einem headerfile klasse.h sowie einer klasse.cpp, wobei ich eben meine Ansprueche aufgrund mangelnder Begeisterung meines Computers beim compilieren, immer weiter absanken (daher makefile).
Aber wie erledige ich das den nun mit Hilfe eines Makefiles:...es sollte ja eigentlich so sein:
test.exe : code.o klasse.o
klasse.o : klasse.cpp klasse.h
code.o : code.cppwie sollte koennte denn da mein Makefile aussehen, damit das endlich was lauffaehiges erstellt, am besten noch in die Datei /user/fileA/01 ?
DankPS:
Auch als totaler Linux DAU weiss ich schon, das Linux .exe nicht interessiert, wollte das ausfuehrbare Endprodukt aber als Hilfe fuer mich mit .exe bezeichnet haben.
-
Hier mal dein Makefile
# Dein Makefile speichern unter Makefile im gleichen Verzeichnis all: klasse code exe klasse: g++ -c klasse.cpp code: g++ -c code.cpp exe: g++ -o test.exe klasse.o code.o
Mit make oder make all kannst du dein Programm jetzt bauen.
Statt Leerzeichen vor g++ blabla musst du zwei (!) tabs setzen sonst sagt make missing seperator.
-
Also zuerst: Was soll erneuert werden.
Dann: Doppelpunkt.
Dann: Von was haengt das ab.
Dann: Neue Zeile.
Dann: TAB.
Dann: Der Befehl, der ausgefuert werden soll.Beispiel(in C, weil ich den g++ nicht so gut kenne): Ich habe ein Code in a.c, b.c und c.c. c.c haengt von a.c und b.c ab. Das Makrfile koennte so aussehen:
testprog: c.c a.o b.o gcc c.c a.o b.o -o testprog a.o: a.c gcc a.c -c b.o: b.c gcc b.c -c
Aufgerufen wird das ganze dann mit
make testprog
und erzeugt Dir dann ein ausfuehrbares Programm mit dem Namen testprog, das mit
./testprog
gestartet werden kann.
-
ºgrimmsenº
schrieb:
Statt Leerzeichen vor g++ blabla musst du zwei (!) tabs setzen sonst sagt make missing seperator.
Ein Tab. Keine Ahnung wie du auf 2 kommst.
-
mc zeigt erst bei zwei tabs den seperator an. Wenn ich ein Tab mache kommt missing seperator. so ist es jedenfalls bei mir.
-
Ist zwar aus der pmake man, ist bei gmake trotzdem das gleiche:
SHELL COMMANDS
Each target may have associated with it a series of shell commands, nor-
mally used to create the target. Each of the commands in this script
must be preceded by a tab.[...]
-
ist es wirklich nötig,std::cout <<"hallo welt";zu schreiben???es langt doch auch ein einfaches cout << "hallo welt";oder lieg ich da etwa falsch???:-)
-
webbuster schrieb:
ist es wirklich nötig,std::cout <<"hallo welt";zu schreiben???es langt doch auch ein einfaches cout << "hallo welt";oder lieg ich da etwa falsch???:-)
Hier ist das std:: nötig, Du könntest es allerdings durch eine vorangestellte using-Direktive -oder Deklaration ersetzen.
-
kann mir jemand sagen wie ich in c eine char variable oder ein array in eine hexa-dezimal zahl umwandle???
z.b.
char text1[10];
printf("geben sie einen text ein:");
scanf ("%x",text1);vielleicht kann mir jemand helfen...
-
ºgrimmsenº
schrieb:
mc zeigt erst bei zwei tabs den seperator an. Wenn ich ein Tab mache kommt missing seperator. so ist es jedenfalls bei mir.
Irgendwie dachte ich mir, dass du mcedit benutzt (insofern war das 'Keine Ahnung' übertrieben
). Der setzt pro Tab wahrscheinlich nur 4 Spaces und fügt dann 8 Spaces zu einem richtigen Tab zusammen glaub ich. Wenn du dir dein fertiges Makefile (egal mit welchem editor) mal mit cat -A anzeigen läßt, wirst du genau ein ^I (Tab Zeichen) pro Separator sehen.
-
stimmt du hast recht war mein fehler...:-)du kannst natürlich erst den std::operator weglassen wenn wenn du den namespace std dazufügst...z.b so
#include <iostream>
using namespace std;
cout << "hallo welt";
return 0;ich hoffe das ist so jetzt richtig:-)
-
#include <iostream>
using namespace std;
int main (){
cout << "hallo welt";
return 0;
}puhhh so das ist jetzt richtig....
compilieren dann unter linux chmod 755 oder chmod+x eingeben und ./programm starten....
-
Bashar schrieb:
Irgendwie dachte ich mir, dass du mcedit benutzt (insofern war das 'Keine Ahnung' übertrieben
). Der setzt pro Tab wahrscheinlich nur 4 Spaces und fügt dann 8 Spaces zu einem richtigen Tab zusammen glaub ich.
Hm, das muss man aber wenn dem wirklich so ist auch irgendwo deaktivieren können; bei mir wird das nämlich nicht so seltsam gehandhabt, ich weiß allerdings nicht mehr ob und wenn ja wo ich das eingestellt habe...
-
DANKE, fuer die vielen Antworten, anscheinend ist mein "hallo Welt" Problem doch wichtiger als erwartet und doch nicht so peinlich fuer mich (auch wenn es das wahrscheinlich schon ist !!) LOL