Forum
Tipps
News
Menu-Icon

Linux C++ - Ich verstehe die Anleitungen zu Makefile nicht

Den ungünstig geposteten Beitrag kann ich leider nicht an anderer Stelle löschen, denke aber das er in dieser Rubrik besser aufgehoben ist, zudem kann ich auch noch fragen, ob meine derzeitige Kombination aus g++ und nasam sinnvoll ist. Wie anders muss ich Assembler-Text in einen CPP-Quelltext eingebunden formatieren, im Vergleich zu einem Quelltext für nasam?

Suse: Linux C++ - Ich verstehe die Anleitungen zu Makefile nicht
« am: Heute, 15:39:44 »

Hi :)

ich fange gerade mit C/ C++ und Assembler unter Linux an und konnte bisher kein Makefile für folgende Gegebenheit erstellen:

Der Quelltext '/home/r66/Desktop/versuch.cpp' benötigt neben 'iostream.h' auch noch '/usr/lib/qt3/include/qapplication.h' und '/usr/lib/qt3/include/qmainwindow.h', wenn auch nicht in der hier abgebildeten, gekürzten Variante.

Die Dateien 'versuch.cpp', 'qapplication.h' und 'qmainwindow.h' existieren in den angegebenen Pfaden.

Kommentiere ich die Qt's aus, funktioniert alles:

1 // versuch.cpp
2
3 #include <iostream>
4 //#include <qapplication.h>
5 //#include <qmainwindow.h>
6 using namespace std;
7
8 int main(int argc, char **argv)
9 {
10   cout << " versuch\n";
11   return 0;
12 }
13

1 # Makefile
2
3 versuch : versuch.cpp
4 g++ versuch.cpp -o versuch

1 # Makefile
2
3 versuch : versuch.o
4 g++ versuch.o -o versuch
5
6 versuch.o : versuch.cpp
7 g++ -c versuch.cpp -o versuch.o

Die richtigen Zeilen um 'qapplication.h' und 'qmainwindow.h' mit einzubeziehen bekomme ich auch mit tmake nicht hin.

Grüße

Ralf


Antworten zu Linux C++ - Ich verstehe die Anleitungen zu Makefile nicht:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

versuchs lieber mit dem compiler -> http://sourceforge.net/project/downloading.php?group_id=10639&use_mirror=surfnet&filename=dev-src_Jul_30_23h03.tar.gz&81378291

Dev-C++ fuer Linux... empfehle ich dir.. das ist eben der compiler und linker gleich mitdrin (wird alles automatisch nachheinander ausgefuehrt... ist auch viel einfacher.. da sind auch alle header mit dabei usw....

MFG
TOMEK

Hi :)

danke für Eure Antworten!

Das Problem mit dem Makefile ist geblieben, in der Rubrik, in die ich mich verposted habe erhielt ich darauf Antwort, die aber wie die Versuche von anjuta und meinen selbst editierten zu verschiedenen Fehlern in verschiedenen Variationen führt. Da sich Dev-C++ nicht einfach installieren lies, im Gegensatz zu kdevelop, welches sich mit Anleitung bisher nicht als zugänglich erwiesen hat und anjuta, das vermeintlich selbsterklärend ist, experimentierte ich bereits mit anjuta.

1. Alte Versuche bereinigen und neue Versuche vorbereiten.

r66@linux:~> rm -r /home/r66/dev-c++
r66@linux:~> mkdir sauberes_verzeichnis
r66@linux:~> cd sauberes_ver*
r66@linux:~/sauberes_verzeichnis> mkdir download
r66@linux:~/sauberes_verzeichnis> mkdir neuer_versuch
r66@linux:~/sauberes_verzeichnis> cd download

2. Dev-C++

r66@linux:~/sauberes_verzeichnis/download> wget --quiet http://surfnet.dl.sourceforge.net/sourceforge/dev-cpp/dev-src_Jul_30_23h03.tar.gz
r66@linux:~/sauberes_verzeichnis/download> tar -xf dev-src*
r66@linux:~/sauberes_verzeichnis/download> cd c++/setup
r66@linux:~/sauberes_verzeichnis/download/c++/setup> su
Passwort:
linux:/home/r66/sauberes_verzeichnis/download/c++/setup # ./install.sh
** Dev-C++ installation script **

You must be root to install. Do you want to continue ?
 (Y/n) ? y
tar: binary.tar.gz: Kann open nicht ausführen.: Datei oder Verzeichnis nicht gefunden
tar: Nicht behebbarer Fehler: Programmabbruch.
tar: Child returned status 2
tar: Fehler beim Beenden, verursacht durch vorhergehende Fehler.
Where do you want to install Dev-C++ ? [/root/dev-c++] : linux:/home/r66/sauberes_verzeichnis/download/c++/setup # exit
r66@linux:~/sauberes_verzeichnis/download/c++/setup> cd ../../../neuer_versuch
r66@linux:~/sauberes_verzeichnis/neuer_versuch> rm -r ~/sauberes_verzeichnis/download
r66@linux:~/sauberes_verzeichnis/neuer_versuch> kate

3. Makefile Lisaaart in Variation, s. http://www.computerhilfen.de/hilfen-6-187045-0.html

3.1 Das Makefile, mit Tab als Separator, statt Leertasten

# Makefile </home/r66/sauberes_verzeichnis/neuer_versuch/Makefile>

neuer_versuch : neuer_versuch.o
    g++ -o neuer_versuch neuer_versuch.o

neuer_versuch.o : neuer_versuch.cpp qapplication.h qmainwindow.h
    g++ -I/usr/lib/qt3/include -Wall -c neuer_versuch.cpp

3.2 Der C++ Quelltext

// neuer_versuch.cpp </home/r66/sauberes_verzeichnis/neuer_versuch/neuer_versuch.cpp>

#include <iostream>
#include <qapplication.h>
#include <qmainwindow.h>
using namespace std;

int main(int argc, char **argv)
{
  cout << " versuch\\n";
  return 0;
}

3.3 Yakuake <Terminal>

r66@linux:~/sauberes_verzeichnis/neuer_versuch> ls
Makefile  Makefile~  neuer_versuch.cpp  neuer_versuch.cpp~
r66@linux:~/sauberes_verzeichnis/neuer_versuch> make
make: *** Keine Regel vorhanden, um das Target »qapplication.h«,
  benötigt von »neuer_versuch.o«, zu erstellen.  Schluss.
r66@linux:~/sauberes_verzeichnis/neuer_versuch>

Hat jemand Ideen oder kennt sich bereits mit anjuta oder kdevelop aus oder ... ;)?

Grüße

Ralf

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

OK, bei mir gehts.
1. Quellcode nach ~/test kopiert
2. qmainwindow.h und qapplication.h in ~/tmp erzeugt (dummies)
3. Makefile wie folgt geaendert:

# Makefile </home/lisaa/test>

neuer_versuch : neuer_versuch.o
        g++ -o neuer_versuch neuer_versuch.o

neuer_versuch.o : neuer_versuch.cpp
        g++ -I/home/lisaa/tmp -Wall -c neuer_versuch.cpp
4.
notbuch:lisaa[7341]$ make
g++ -o neuer_versuch neuer_versuch.o
notbuch:lisaa[7342]$ ./neuer_versuch
 versuch
notbuch:lisaa[7343]$
Wo ist das Problem?

neuer_versuch.cpp

// neuer_versuch.cpp in /home/USER/test

#include <iostream>
// #include <qapplication.h> // AUSKOMMENTIERT
// #include <qmainwindow.h>
using namespace std;

int main(int argc, char **argv)
{
  cout << "versuch\n";
  return 0;
}


neuer_2.cpp

// neuer_2.cpp in /home/USER/test

#include <iostream>
#include <qapplication.h> // EINGEBUNDEN
#include <qmainwindow.h>
using namespace std;

int main(int argc, char **argv)
{
  cout << "EINGEBUNDEN\n";
  return 0;
}


Makefile für neuer_versuch

# Makefile in /home/USER/test
# Header in /home/USER/tmp

neuer_versuch : neuer_versuch.o
    g++ -o neuer_versuch neuer_versuch.o

neuer_versuch.o : neuer_versuch.cpp
    g++ -I/home/r66/tmp -Wall -c neuer_versuch.cpp

Makefile2 für neuer_2

# Makefile in /home/USER/test
# Header in /home/USER/tmp

neuer_versuch : neuer_2.o
    g++ -o neuer_2 neuer_2.o

neuer_2.o : neuer_2.cpp
    g++ -I/home/r66/tmp -Wall -c neuer_2.cpp

Yakuake sinngemäß zitiert

/home/r66/tmp
qapplication.h  qmainwindow.h

/home/r66/test
Makefile  Makefile2  neuer_2.cpp  neuer_versuch.cpp

r66@linux:~/test> make
g++ -I/home/r66/tmp -Wall -c neuer_versuch.cpp
g++ -o neuer_versuch neuer_versuch.o
r66@linux:~/test> ./neuer_versuch
versuch

r66@linux:~/test> make -f Makefile2
g++ -I/home/r66/tmp -Wall -c neuer_2.cpp
In file included from neuer_2.cpp:4:
make: *** [neuer_2.o] Fehler 1
r66@linux:~/test>

und im originären Beispiel waren alle Dateien in /usr/lib/qt3/include, resp. habe ich auch schon zu diesem -IPfad auch -LPfade mit angegeben

;)
Ralf

Ups °oO im Makefile2 ist ein Fehler ;D, auch berichtigt wird es nicht funktionieren ...
« Letzte Änderung: 15.08.07, 15:26:23 von KAsper.ger »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hmm, vielleicht mag der Compiler es nicht, wenn die Dinger leer sind. Schreib doch mal irgendwas in die qapplication.h etc rein (z.B. #define SINNLOS 42)...
Funktioniert es, wenn du beim include den Pfad angibst (#include "../tmp/qapplication.h")?

Ich habe die original Header-Dateien von /usr/lib/qt3/include nach /home/USER/tmp kopiert und alles mögliche nach Internet und Büchern probiert, auch vorhandene Makefiles dechiffriert, die Variablen in Pfade umgewandelt, die Benutzung von g++ scheint so korrekt zu sein, der oder die Fehler könnten in der Definition der Abhängigkeiten liegen, das durchschaue ich nicht, resp. müssen die Hedaer-Dateien anders als in den letzten Versuchen wohl aufgeführt werden, das testete ich natürlich auch mit einem Hallo-Welt-Programm, das diese beiden Qt-Header auch wirklich benötigt. An den Pfad die Dateien Anhängen ist auch nicht der richtige Weg. Im Internet gibt es zu anjuta ein Manual, evtl. habe ich das "Projekt" falsch gehandlet, denn eigentlich soll im Rahmen eines Projekts, wie es unter anjuta heißt, ein Makefile zum Quelltext von anjuta erstellt werden, die letzten Beipiele habe ich natürlich nicht von anjuta, sondern mit einem normalen Editor, Kate erstellt.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Einfach die Originaldateien kopieren kann gar nicht gehen, weil da wieder andere Header included werden - das sollte aber nen Haufen Fehlermeldungen geben...
Aber ansonsten bin ich auch ratlos - keine Ahnung was da schief gehen koennte.

Eben, der Pfad muss auch auf Include-Dateien in den Include-Dateien verweisen, einem Projekt von anjuta konnte ich mit Project > Add File > Include-Datei zwar die qt3.h-Dateien hinzu fügen, doch bei der automatisierten Erstellung gab es immer noch Fehler und Zeit habe ich jetzt auch keine, doch es ist möglich vielfach Pfade und Kryptisches zu editieren, das anjuta evtl. noch zusätzlich oder statt dessen benötigen könnte.

Jetzt scheint dieser Thread doch hier weiter zu gehen:

http://www.computerhilfen.de/hilfen-5-187045-0.html#919584


« ich will java programmierung lernen.[C++] std::cin und die maximale laenge eines Integers »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
AGP Schnittstelle
Die AGP (Accelerated Graphics Port) - Schnittstelle wurde in den 1990er Jahren eingeführt und war speziell für Grafikkarten in PCs konzipiert. Sie bot eine dire...

PCI Schnittstelle
PCI steht für "Peripheral Component Interconnect": eine Kartenschnittstelle auf dem Computer Mainboard, die in den 1990er Jahren eingeführt wurde und die ä...

Serielle Schnittstelle
Die serielle Schnittstelle ist eine genormte Schnittstellen zur seriellen Datenübertragung vom und zum Computer. Serielle Schnittstellen wie RS-232 und RS-422 spielt...