Um dem gcc zu setzen relative Dateinamen im debug-Informationen
Dem Projekt bin ich kompilieren verwendet CMake, die liebt absolute Pfadnamen.
Wenn ich das kompilieren mit debug-Informationen aktiviert, gcc legt diese langen Namen in .debug_str
Abschnitte, die schlecht ist für das Debuggen. Ich hätte gerne kurze relativ-zu-Projekt-root-Pfadnamen, statt.
Gibt es eine Möglichkeit zu sagen, gcc-Streifen ein Teil von pathname, bevor emitting debug-Daten? Oder, vielleicht, gibt es einige Tools, die tun könnte, dass auf kompilierten Binärdateien?
Ich habe versucht, mit SET(CMAKE_USE_RELATIVE_PATHS ON)
(das scheint zu sein, verpönt von devs) option, aber da bin ich mit out-of-source-builds, die Pfade sind noch nicht in form, ich würde wollen, dass Sie sein. I. e. Sie sind ./../src/mod_foo/foo.c
statt mod_foo/foo.c
.
./../src/mod_foo/foo.c
ist ein relativ Pfad...- Ja, aber nicht in Bezug auf das Projekt-root, obwohl (das ist bei
./../src
) - Sie haben ein problem mit CMake, nicht mit gcc. GCC setzt in
.debug_str
genau, es wird als Kommandozeilen-argument. - Ich weiß nicht wirklich über die Methode. Ich sehe drei theoretisch mögliche Wege, dies zu tun, entweder man ist vollkommen in Ordnung bei mir: 1) CMake-Verzeichnis ändern, um Projekt-root und pass gcc-relativ-zu-Projekt-root-Quelle mit dem Namen; 2) eine Änderung dieser GCC Verhalten, so werde es mangle Dateinamen vor dem schreiben; 3) Patchen Sie die kompilierte Binärdatei mit einem tool zu beheben Dateinamen. Das problem ist, ich weiß nicht, wie zu tun alle der oben genannten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die RULE_LAUNCH_COMPILE Eigenschaft eines CMake Ziel zu haben, die CMake aufrufen eines shell-Skript, das wandelt den Pfad der Quelldatei ein, um ein Projekt relativer Pfad vor dem Aufruf von gcc. Verwenden Sie die CMake-Funktion configure_file erzeugen ein shell-Skript, das weiß, über die
PROJECT_SOURCE_DIR
undPROJECT_BINARY_DIR
Ihres Projekts.In Ihrer äußersten
CMakeLists.txt
fügen Sie den folgenden code:Folgende Vorlage shell-Skript
gcc_debug_fix.sh.in
gehen muss, um das root-Verzeichnis der CMake-Projekt:Das shell-Skript verwendet die Informationen aus der Variablen
PROJECT_BINARY_DIR
undPROJECT_SOURCE_DIR
verwandeln Sie den Pfad der Quell-Datei einen Pfad relativ zum Projekt-Stammverzeichnis und die Objekt-Datei Pfad in einen absoluten Pfad. Da gcc übergeben bekommt ein Projekt relativer Pfad jetzt.debug_str
sollte dieser Pfad auch.Folgenden Einschränkungen gelten:
gcc_debug_fix.sh.in
.CMAKE_USE_RELATIVE_PATHS
anOFF
wieder.-o
und-c
flags.Können Sie die -fdebug-Präfix-Karte Flagge neu zuordnen, die debugging-Informationen Pfade. Zum Beispiel, um die Pfade relativ zum Speicherort erstellen verwenden Sie: -fdebug-Präfix-map=/full/build/path=.
Wenn ich konnte nicht wirklich fixieren Sie die make-Datei/tool, um dies richtig tun, würde ich ein wrapper-script schreiben gcc erkennt, dass absolute Pfadnamen und wandelt dann zu den relativen.
Es Aussehen könnte, so etwas in bash:
Wenn Ihr source-Verzeichnis hat Unterverzeichnisse, dann müssen Sie mit diesen sorgfältig, aber die oben genannten sollten für eine flache source-Verzeichnis. Ich habe es nicht getestet, obwohl, und ich wäre nicht überrascht, wenn ich habe das zitierte falsch, aber das wird nur ein problem sein, wenn Sie müssen Pfadnamen mit Leerzeichen. Es ist auch nicht handle Parameter wie
-I/whatever/include
, aber Sie können das Problem beheben, dass.