PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C und GTK+-2.0: dynamische variablen (auch m. dyn. Bezeichn.) zur Laufzeit erzeugen



tuxboy
27-03-2002, 22:04
Hi,
ich schreibe gerade ein kleines Programm zu lernzwecken, das mir aber später auch einige Arbeitsschritte abnehmen wird (zb. das ewige kompilieren/debuggen und ausführen der geschrieben Programme)....

Jetzt hab ich nur ein Problem:
Ich versuche mit Hilfe von execl() aus der "unistd.h" Kommandos auszuführen...in einem Fall funktioniert das auch einwandfrei....nun möchte ich auch noch den Compiler (gcc) mit Hilfe eben jener Funktion ausführen und ihm als Argumente noch Pfade zu benötigten Bibliotheken übergeben (z.b: gcc -I/usr/include/gtk-2.0 main.c -o hello).
Das funktioniert auch, aber....ich möchte dem Benutzer die Möglichkeit geben alle in seinem Fall benötigten Bibliotheks-Pfade (Anzahl der benötigten Variablen zur Entwicklungszeit nicht bekannt) anzugeben; dann soll jeder Pfad in einer eigenen Variable gespeichert werden:
gchar * libs1 = Pfad1;
gchar * libs2 = Pfad2;
nun sollen noch diese Variablen execl() übergeben werden....

Ich würde mich sehr über Eure Hilfe freuen....
Möglicherweise geh ich hier auch bisschen zu kompliziert vor...wenn mir jemand eine einfachere Lösung nennen kann, würde ich mich sehr freuen!

Viele Grüße und besten Dank

TheDodger
28-03-2002, 15:09
Hmmm, ich würde (wenn ich überhaupts so denken würde ;) ) eine Stringklasse nutzen und dann das ungefähr so machen:

BString _librarys = "";

_librarys = "Pfad1";
_librarys += "Pfad2";
_librarys += "...";

Wenn du nicht weißt, wieviele Pfade du bekommen wirst ... while() wird dir auch da helfen ...

Allerdings versteh ich nicht ganz den Sinn des ganzen ...


--
Frohe Ostern

tuxboy
28-03-2002, 16:20
Hi,
danke für die schnelle Hilfe....

Wenn ich den Sinn verstanden hab, lass ichs Dich wissen;)

Viele Grüße

tuxboy
28-03-2002, 16:43
Ich nochmal,

siehst Du irgend eine andere Möglichkeit execl() eine bis dahin unbekannte ANzahl von Argumenten zu übergeben??

execl(str_command, "process_name", str_libs1, str_libs2, ..., str_libs7, str_srcfile, "-o", str_executable);

Und / oder kannst Du mir sagen wie ich ihr ein Argument wie etwa `pkg-config --cflags --libs gtk+-2.0` übergeben kann? Das will sie (die Funktion;)) nämlich nicht annehmen....deshalb greife ich ja schon auf die Sache mit den libs1-libs? zurück (zumindest versuche ichs...wie gesagt: lernzwecke:))

Viele Grüße

TheDodger
28-03-2002, 17:08
Original geschrieben von tuxboy
Hi,
danke für die schnelle Hilfe....

Wenn ich den Sinn verstanden hab, lass ichs Dich wissen ;)

Was gibt es da misszuverstehen? ;)

Mit einer Stringklasse kannst du locker strings aneinanderhängen und diesen einen dann an dein execl() weiterreichen ...

TheDodger
28-03-2002, 17:14
Original geschrieben von tuxboy
Ich nochmal,

siehst Du irgend eine andere Möglichkeit execl() eine bis dahin unbekannte ANzahl von Argumenten zu übergeben??

execl(str_command, "process_name", str_libs1, str_libs2, ..., str_libs7, str_srcfile, "-o", str_executable);



Wenn du genau weist, wieviele str_libs[x] du bekommst, dann mit sprintf() ...
Wenn nicht, dann wird's auch komplizierter und deshalb meine Empfehlung einer Stringklasse (ich hab mir selber eine programmiert ... ist zwar noch nicht ganz fertig, aber der gröbste Kram läuft)



Und / oder kannst Du mir sagen wie ich ihr ein Argument wie etwa `pkg-config --cflags --libs gtk+-2.0` übergeben kann? Das will sie (die Funktion;)) nämlich nicht annehmen....deshalb greife ich ja schon auf die Sache mit den libs1-libs? zurück (zumindest versuche ichs...wie gesagt: lernzwecke:))


man snprintf

vielleicht hilft das?

Wie gesagt, bei statischer Anzahl der Argumente -> snprintf
bei dynamischer Anzahl -> Stringklasse