C++: Programmverzeichnis ermitteln



  • Mein C++ Programm soll nicht in einem vorher festgelegten Ordner (z.B. unter /usr/local) installiert werden, sondern irgendwo nach Wunsch, am besten im Home-Verzeichnis. Es geht jetzt nicht um den Zugriff auf das Programm, um es starten zu können, sondern darum, wie das Programm auf seine Daten zugreifen kann, die in Unterverzeichnissen zum Programmverzeichnis untergebracht sind. Folglich muss ich zur Laufzeit das Progverzeichnis feststellen können.

    getcwd hilft nicht weiter, da ich das Programm ja von irgendwo starten kann, z.B. auch über ein Desktop-Icon. Ich möchte ferner vermeiden, dass man - wie z.B. in KDE möglich - ein Arbeitsverzeichnis zum Icon angibt. Also die schlichte Frage: Wie kann das Programm feststellen, wo es sich selber befindet?



  • Warum nimmst du nicht einfach relative Pfade zu den Unterverzeichnissen ?



  • readlink() oder canonicalize_file_name() auf '/proc/self/exe' mit anschließendem dirname() 🙂



  • am besten du verwendest GNU-Autotools, oder cmake, oder scons, oder was weiß ich und beim Konfigurieren des Packets, lässt du per -D CFLAGS das bin Verzeichnis exportieren, oder generierst du eine config.h mit den Werten drin. Das finde ich die portabelste Lösung.



  • supertux schrieb:

    am besten du verwendest GNU-Autotools, oder cmake, oder scons, oder was weiß ich und beim Konfigurieren des Packets, lässt du per -D CFLAGS das bin Verzeichnis exportieren, oder generierst du eine config.h mit den Werten drin. Das finde ich die portabelste Lösung.

    das setzt voraus, dass er den quellcode veröffentlichen will 🙂



  • Nicht zwingend. Erbraucht ja nur den Teil fuer config im Source liefern ... nVidia macht es so aehnlich. Aber sein Programm irgendwo hinzuhauen ist nicht der Linux/Unix-Weg.



  • sothis_ schrieb:

    supertux schrieb:

    am besten du verwendest GNU-Autotools, oder cmake, oder scons, oder was weiß ich und beim Konfigurieren des Packets, lässt du per -D CFLAGS das bin Verzeichnis exportieren, oder generierst du eine config.h mit den Werten drin. Das finde ich die portabelste Lösung.

    das setzt voraus, dass er den quellcode veröffentlichen will 🙂

    nicht zwingend. Man kann aber auch mit einer Konfigurationsdatei arbeiten und dort die Pfade setzen.



  • Ich wollte nun keine Diskussion vom Zaun brechen, wie man am besten ein Unix-Programm installiert. Das ist mir schon bekannt. Es geht hier darum, dass in der Entwicklungsphase das Open Source Programm auf etlichen Rechnern eher provisorisch installiert wird, evtl. in mehreren Arbeitsversionen parallel.

    Aber es stimmt schon, eigentlich kann man zur Bedingung machen, dass das Programm von der Konsole aus dem Source-Verzeichnis heraus gestartet wird, dann sind natürlich auch relative Pfade möglich. Zumal die Leute ohnehin am Programm herummachen werden und stets neu das Makefile starten müssen. Trotzdem interessiert mich, ob es die angefragte Möglichkeit gibt. Ich werde mal ein bisschen in den Manpages zu readlink () usw. herumstöbern.

    Im übrigen wird es am Schluss, wenn das Programm einigermaßen fertig ist, ein sauberes Build geben, keine Frage.


Anmelden zum Antworten