KDevelop and paths

xpan | Δευ, 06/09/2008 - 11:58 | 2' | 9

Καλημέρα.

Προσπαθώ να γράψω ένα απλό πρόγραμμα στο geany χρησιμοποιώντας QT βιβλιοθήκες. Επειδή έρχομαι απο περιβάλλον windows και πργραμματισμό σε Java κάποια πράγματα μου φαίνονται λίγο σύνθετα.

Προσπαθώ να γράψω το εξής απλό:

#include <QApplication>
#include <QLabel>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel("hello world!");
label->show();
return app.exec();
}

Όταν πάω να κάνω μεταγλώτιση μου βγάζει τα εξής λάθη:

g++ -Wall -c "hello.cpp" (στο φάκελο: /home/xpan/workspace/QTprojects/hello)

hello.cpp:1:24: error: QApplication: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος

κλπ, κλπ...

Υποθέτω πως υπάρχει πρόβλημα με τις βιβλιοθήκες και τη δήλωσή τους σε κάποια path enviromental variables. Έχω δίκιο; Τι πρέπει να κάνω;

Tags
Δώσε αστέρια!

MO: (ψήφοι: 0)

Σχόλια

Ξέχασα να αναφέρω ότι προσπάθησε και με KDevelop (σε gnome περιβάλλον) άλλα ούτε εκεί κατάφερα να κάνω κάτι. Η σκέψη ότι μάλλον φταίνε τα Path variables προέρχεται και απο τη συμπεριφορά του KDevelop.

Να σε ρωτήσω; Εχεις εγκαταστήσει τα πακέτα ανάπτυξης (development packages) του Qt; Μάλλον αυτό φταίει

Π.χ. στο Fedora 9 έχω εγκαταστήσει τα εξής:

qt-devel
qt
qt-x11

Σε Debian-based διανομές θες αυτά:

libqt4-dev, libqt4-qt3support, qt4-dev-tools, qt4-designer, qt4-doc

Ενώ σε Mandriva αυτά:

libqt4-devel, libqt3support4, qt4-common, qt4-examples, qt4-designer, qt4-assistant

Εγκατέστησε τα ανάλογα.

Δεν φτάνει όμως αυτό. Πρέπει να έχεις φτιάξει το κατάλληλο src.pro αρχείο. Αυτό το φτιάχνεις με το qmake-qt4 (προσοχή, είναι άλλο το qmake και άλλο το qmake-qt4, βρισκόμαστε σε μετάβαση από την 3 στην 4 και γίνεται λίγο χαμός...), το οποίο τρέχεις στο φάκελο με τα αρχεία του κώδικά σου. Τα περιεχόμενα του είναι κάπως έτσι (αν θες να το φτιαξεις χειράτα:


HEADERS = convertor.h
FORMS = convertorform.ui
SOURCES = main.cpp\
convertor.cpp

Τις περισσότερες φορές, το qmake-qt4 σου λύνει τα χέρια. Μόλις το τρέξεις με την παράμετρο -project, θα φτιάξει το .pro. Μετά το ξανατρέχεις σκέτο, και μετά make.

--Stat rosa pristina nomine, nomina nuda tenemus

BTW, το KDevelop σου λύνει τα χέρια μια και δεν χρειάζεται να κάτσεις να ασχοληθείς με .pro αρχεία και qmake-qt4.

--Stat rosa pristina nomine, nomina nuda tenemus

Ευχαριστώ μάλλον είναι εγκατεστημένα:

[xpan@Fedora-Desktop ~]$ sudo yum install qt-devel qt qt-x11
Password:
livna                     100% |=========================| 2.1 kB    00:00
fedora                    100% |=========================| 2.1 kB    00:00
adobe-linux-i386          100% |=========================|  951 B    00:00
updates                   100% |=========================| 2.3 kB    00:00
Setting up Install Process
Parsing package install arguments
Package qt-devel - 1:3.3.8b-2.fc8.i386 is already installed.
Package qt - 1:3.3.8b-2.fc8.i386 is already installed.
No package qt-x11 available.
Nothing to do

Επίσης το KDevelop μου γράφει οτι

Before starting the build you may need to setup the KDE4 environment variables.
To do this open Project->Project Options and then look at the "Run" and the "Make"
pages. Each of these two has an environment variables widget in which you have
to fill in the right values for the variables already listed.


After setting up the variables you'll also need to run cmake inside the build
directory. This can not be done by kdevelop as a KDE4 environment is needed
when running cmake to find KDE4. Open the integrated konsole and change to the build
subdirectory. Then setup a KDE4 environment and run "cmake ../"

Έκανα αυτό που λέει με το cmake και μου έγραψε αυτό:

[xpan@Fedora-Desktop build]$ cmake ../
CMake Error: ERROR: Could not find KDE4 kde4-config
-- Configuring done
[xpan@Fedora-Desktop build]$

Ενώ τα PATHs που λέει δεν μπορώ να βρω κάτι παραμόνο εδώ:

http://techbase.kde.org/Getting_Started/Increased_Productivity_in_KDE4_with_Scripts/.bashrc

άλλα δεν είμαι σίγουρος οτι είναι οι σωστές τιμές για το fedora 8

Δεν υπάρχει κάποιο step-by-step tutorial για να ξεκινήσει κάποιος απο την αρχή;

...να προσθέσω οτι στο KDevelop, όταν πάω να κάνω μεταγλώττιση μου βγάζει αυτό:

cd '/home/xpan/workspace/hello2/build' && KDEDIRS="/etc/kde:/user/include/kde" KDEHOME="/home/xpan/.kde" LD_LIBRARY_PATH="/usr/lib/qt4:/usr/share/qt4" PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games" PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/share/pkgconfig" LC_MESSAGES="C" LC_CTYPE="C" make -k -j1
make: *** No targets specified and no makefile found. Stop.
*** Έξοδος με κατάσταση: 2 ***

Είσαι στην περίπτωση του src.pro/Makefile. Στο λέει καθαρά: "No targets specified and no makefile found."

Πήγαινε στο κατάλογο με τα sources και είτε φτιάξε ένα onoma.pro αρχείο που περιέγραψα πάνω και τρέξε qmake-qt4

ή

τρέξε
qmake-qt4 -project
qmake-qt4

και μετά make.

--Stat rosa pristina nomine, nomina nuda tenemus

Ευχαριστώ. Νομίζω πως πάλι κάτι δεν κάνω καλά:

[xpan@Fedora-Desktop hello2]$ qmake-qt4 -project
[xpan@Fedora-Desktop hello2]$ qmake-qt4
[xpan@Fedora-Desktop hello2]$ make
/usr/lib/qt4/bin/uic hello2view_base.ui -o ui_hello2view_base.h
/usr/lib/qt4/bin/uic prefs_base.ui -o ui_prefs_base.h
make: *** No rule to make target `hello2.moc', needed by `hello2.o'. Stop.

Τελικά δοκίμασα απο την αρχή:

Άνοιξα το geany, έγραψα αυτό το απλό αρχείο το αποθήκευσα ως
hello.cpp

έτραξα με τη σειρά απο το terminal

[xpan@Fedora-Desktop hello]$ ls
hello.cpp
[xpan@Fedora-Desktop hello]$ qmake-qt4 -project
[xpan@Fedora-Desktop hello]$ ls
hello.cpp  hello.pro
[xpan@Fedora-Desktop hello]$ qmake-qt4
[xpan@Fedora-Desktop hello]$ ls
hello.cpp  hello.pro  Makefile

[xpan@Fedora-Desktop hello]$ make
g++ -c -pipe -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2
-fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386
-mtune=generic -fasynchronous-unwind-tables -Wall -W -D_REENTRANT
-DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB
-I/usr/lib/qt4/mkspecs/linux-g++ -I. -I/usr/include/QtCore
-I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtGui
-I/usr/include -I. -I. -I. -o hello.o hello.cpp
g++  -o hello hello.o     -lQtGui -lQtCore -lpthread
[xpan@Fedora-Desktop hello]$ ./hello
[xpan@Fedora-Desktop hello]$

και δούλεψε κανονικά.

Μια
τελευταία ερώτηση. Δεν κατάλαβα γιατί πρέπει να δημιουργώ .pro αρχείο;
Προσπάθησα να ξεκινήσει κατευθείαν απο το qmake-qt4 άλλα δεν πέτυχε.

Πολύ ωραία. Χαίρομαι που το έλυσες.

Πολύ απλά, το .pro αρχείο περιέχει μια περιγραφή του project σου. Π.χ. τι sources έχεις, τι headers, τι .qrc (αρχεία εικονιδίων, κοκ), τι φόρμες στο Designer κλπ κλπ. Σε απλές περιπτώσεις (όπως σου έτυχε) η εντολή qmake-qt4 -project φτιάχνει μόνη της και επιτυχώς το .pro αρχείο. Σε πιο περίπλοκες δουλειές (όταν έχεις πολλά αρχεία και στοιχεία) όμως θέλει (και) χεράκι.

Στη συνέχεια, από το .pro αρχείο, ξανατρέχοντας το qmake-qt4 παράγεται το Makefile. Το τελευταίο, θα ξέρεις, είναι το κρίσιμο αρχείο με τις οδηγίες για compile flags, install options, κλπ κλπ, του Linux. Κάθε project έχει ένα τέτοιο. Αυτό το Makefile είναι οι οδηγίες που ψάχνει να βρει η εντολή make για το "χτίσιμο" του εκάστοτε προγράμματος. Το κακό είναι ότι η δημιουργία του Makefile θεωρείται δύσκολη...

Αρα η απάντηση στο ερώτημά σου είναι: "γιατί γλυτώνεις την ανάγκη να διαβάσεις πως φτιάχνονται τα Makefile(s)..."

:)

--Stat rosa pristina nomine, nomina nuda tenemus