This forum has been archived. All content is frozen. Please use KDE Discuss instead.

kdevelop build/link - include/library-Pfade

Tags: None
(comma "," separated)
miriki
Registered Member
Posts
8
Karma
0
OS
Moinsens!

Ich versuch mich gerade mal, etwas in C (bzw. auch C++) einzuarbeiten und möchte das dann auch gerne direkt auf der Linux-Kiste (Debian 11.3 per xrdp auf mein Windows 10) mit einer vernünftigen IDE machen. Erste Gehversuche mit kleineren Progrämmchen und dem gcc direkt auf der CLI habe ich hinbekommen. (Eigentlich komme ich eher aus der VBA, VB.net und C# Welt mit MS-Office bzw. Visual-Studio.)

Was ich habe:
Eine neue Session "test", darin ein neues Projekt "test_cmake_c" --> kommt aus "Project - New from Template... - Standard , Terminal, CMake C" --> erstellt main.c

Build:
Code: Select all
/home/miriki/projects/kdevelop/cpp/test_cmake_c/build> make -j4
[100%] Built target test_cmake_c
*** Finished ***

Execute:
Code: Select all
/home/miriki/projects/kdevelop/cpp/test_cmake_c/build> /home/miriki/projects/kdevelop/cpp/test_cmake_c/build/test_cmake_c
Hello, World!
*** Finished ***

Ein neuer Launcher ist "New Compiled Binary Launcher" unter ebendiesem test_cmake_c und steht auf
Code: Select all
(X) Project target: test_cmake_c/test_cmake_c

Und das Projekt-Verzeichnis sieht so aus:
Code: Select all
miriki@lxdeb1130:~/projects/kdevelop/cpp/test_cmake_c$ ls -la
insgesamt 32
drwxr-xr-x 4 miriki miriki 4096  7. Jul 10:34 build
-rw-r--r-- 1 miriki miriki  163  6. Jul 21:24 CMakeLists.txt
drwxr-xr-x 8 miriki miriki 4096  7. Jul 10:34 .git
drwxr-xr-x 2 miriki miriki 4096  7. Jul 12:43 .kdev4
-rw-r--r-- 1 miriki miriki  118  6. Jul 21:24 main.c
-rw-r--r-- 1 miriki miriki   53  6. Jul 21:24 test_cmake_c.kdev4

Ich kann auch direkt in das "build"-Verzeichnis gehen und:
Code: Select all
miriki@lxdeb1130:~/projects/kdevelop/cpp/test_cmake_c/build$ make
[100%] Built target test_cmake_c
miriki@lxdeb1130:~/projects/kdevelop/cpp/test_cmake_c/build$ ls -la
insgesamt 64
drwxr-xr-x 3 miriki miriki  4096  6. Jul 21:24 .cmake
-rw-r--r-- 1 miriki miriki 12071  6. Jul 21:24 CMakeCache.txt
drwxr-xr-x 5 miriki miriki  4096  7. Jul 12:46 CMakeFiles
-rw-r--r-- 1 miriki miriki  2499  6. Jul 21:24 cmake_install.cmake
-rw-r--r-- 1 miriki miriki   277  7. Jul 10:34 compile_commands.json
-rw-r--r-- 1 miriki miriki  7298  7. Jul 10:34 Makefile
-rwxr-xr-x 1 miriki miriki 17864  7. Jul 10:09 test_cmake_c

So weit, so gut... Scheint zu funktionieren. Jetzt geht's einen Schritt weiter.

Ich schaue mir gerade das OpenBook von Rheinwerk an: https://openbook.rheinwerk-verlag.de/linux_unix_programmierung/index.htm, dort speziell Kapitel 14, ev. 15 und 16. Aber fangen wir klein an: Kapitel 14.4.6 hallo_x.c

Was ich habe:
Eine neue Session "Rheinwerk OpenBook", darin ein neues Projekt "hallo_x" --> kommt aus "Project - New from Template... - Standard , Terminal, CMake C" als "hallo_x" unter "/home/miriki/projects/kdevelop/rheinwerk_openbook/" --> das bereits ausprobierte hallo_x.c aus einem anderen Verzeichnis habe ich dann als main.c in das Projekt einkopiert.

Hier würde jetzt, entsprechend Rheinwerk, gehen:
Code: Select all
miriki@lxdeb1130:~/projects/kdevelop/rheinwerk_openbook/hallo_x$ gcc -o hallo_x main.c -L/usr/X11R6/lib -lX11
miriki@lxdeb1130:~/projects/kdevelop/rheinwerk_openbook/hallo_x$ ./hallo_x
X connection to :10.0 broken (explicit kill or server shutdown).

Das funktioniert, weil my_delay.h auch in das Projekt-Verzeichnis kopiert ist. Nicht Sinn der Sache, da diese .h natürlich auch von anderen Projekten genutzt werden soll.

Ich würde also viel lieber benutzen:
Code: Select all
miriki@lxdeb1130:~/projects/kdevelop/rheinwerk_openbook/include$ ls -la
insgesamt 12
-rw-r--r-- 1 miriki miriki  657  6. Jul 20:12 my_delay.h

Aber wie sage ich dem Projekt in kdevelop jetzt, dass dieser Include-Pfad existiert und benutzt werden soll? Im Visual-Studio wären das relativ simpel die "Referenzen", direkt im Menü erreich- und einstellbar.

Und ein weiteres Projekt aus Kapitel 16.4.1 sdl1.c: Im Gegensatz zu dort geht es mit
Code: Select all
miriki@lxdeb1130:~/projects/kdevelop/rheinwerk_openbook/sdl1$ gcc main.c -o sdl1 `sdl-config --libs` `sdl-config --cflags`
miriki@lxdeb1130:~/projects/kdevelop/rheinwerk_openbook/sdl1$ ./sdl1
Erfolgreich beendet!

(In- und Output musste weiter nach vorne in der Aufrufzeile.)
Code: Select all
miriki@lxdeb1130:~/projects/kdevelop/rheinwerk_openbook/sdl1$ sdl-config --libs
-L/usr/lib/x86_64-linux-gnu -lSDL
miriki@lxdeb1130:~/projects/kdevelop/rheinwerk_openbook/sdl1$ sdl-config --cflags
-I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT

Und wie bringe ich dem Build das bei? Ohne das gibt's nämlich bei Build nur
Code: Select all
/home/miriki/projects/kdevelop/rheinwerk_openbook/sdl1/main.c:14: undefined reference to `SDL_Init'

und diverse andere Fehler.

Und nun bräuchte ich mal eure Hilfe, bevor ich durch weiteres Herumprobieren hier mehr kaputt als heil mache. ;-)

Gruss, Michael
miriki
Registered Member
Posts
8
Karma
0
OS
miriki wrote:bevor ich durch weiteres Herumprobieren hier mehr kaputt als heil mache.


Naja, ein bisschen habe ich dann doch noch herumprobiert...

Zuerst, hatte ich vergessen: kdevelop 5.6.2

Ich hab jetzt 2 Sachen gemacht:

a) Links in der Liste der "Projects" das File CMakeLists.txt um eine Zeile erweitert:
Code: Select all
target_link_libraries(hallo_x X11)


b) Das Projekt "hallo_x" mit linker Maustaste aktiviert und dann im Menü
Project - Open Configuration... - Language Support - Includes/Imports
den Pfad
/home/miriki/projects/kdevelop/rheinwerk_openbook/include
hinzugefügt.

Nun bekam ich mit rechter Maustaste auf dem Projekt und "Build" dann:
Code: Select all
/home/miriki/projects/kdevelop/rheinwerk_openbook/hallo_x/build> make -j4
[100%] Built target hallo_x
*** Finished ***


Auch das Projekt sdl1 ähnlich:
Code: Select all
CMakeListe.txt: target_link_libraries(sdl1 SDL)
Include: s.o.

(obwohl ich die my_delay.h hier gar nicht brauche, fällt mir gerade auf. Naja...)
ergibt dann:
Code: Select all
/home/miriki/projects/kdevelop/rheinwerk_openbook/sdl1/build> make -j4
[100%] Built target sdl1
*** Finished ***


Kann mir jemand bestätigen, dass das der richtige Weg ist?

Jetzt hab ich noch das Problem, dass "Run" ins Leere läuft. Das "Project target: hallo_x/hallo_x" ist nicht das richtige Target. Das Executable wird nämlich als hallo_x/build/hallo_x erzeugt, also nicht im Projekt- sondern im Build-Unterverzeichnis.

Woran kann / muss ich da jetzt noch drehen?

Gruss, Michael
miriki
Registered Member
Posts
8
Karma
0
OS
miriki wrote:Woran kann / muss ich da jetzt noch drehen?


Ok, nächstes Teilergebnis: Ich hab die Launches von "Target" auf "Executable" umgestellt. Ich weiss nur nicht so recht, ob das letztendlich wirklich besser ist. Aber die Executables werden jetzt korrekt gestartet.

(Wenn man daran denkt, das Run-Target im Menü "Run - Current Launch Configuration" jeweils umzustellen...)

Gruss, Michael


Bookmarks



Who is online

Registered users: Bing [Bot], Google [Bot], kesang, Yahoo [Bot]