Hallo zusammen, nach mehrtägigem Suchen und Herumprobieren mit PC-Lint V9 bin ich nun am Verzweifeln. Folgendes Problem: Ich habe ein C-Projekt mit mehreren Ordnern und Unterordnern (wichtig ist, dass an dieser Verzeichnisstruktur nichts geändert werden darf). Compilermäßig wird das ganze Projekt ordentlich kompiliert und gelinkt und der entstehende Maschinencode läuft fehlerfrei - sprich das Programm funktioniert soweit. Wenn ich nun aber den gesamten Code mit PC-Lint auf MISRA-C 2004 checken will, dann tritt folgendes Problem auf. In meiner main.c wird die main.h per #include eingebunden, die auch geöffnet werden kann, da sie mit der main.c im gleichen Ordner liegt. Soweit, so gut! In der main.h wird nun aber ein Headerfile eingebunden, was sich in einem ganz anderen Ordner befindet und hier mault PC-Lint rum: Error 322: Unable to open include file 'Hardware\horn_cts.h' Im PC-Lint Reference Manual stehen extrem viele teils völlig unverständliche Dinge drin, wie man mit "INCLUDE environment variables" umgeht. (z.B. -iC:\..., +fdi, usw.) Ich habe hier schon einiges versucht, aber egal was ich auch getan habe, der Fehler bleibt. Ich wäre äußerst dankbar, wenn einer, der sich damit auskennt, eine brauchbare Beschreibung liefern könnte. Dr.Google habe ich bereits stundenlang ausgequetscht. Dank im voraus. Gruß Anderl
Dein Compiler verwendet einen sogenannten Include-Pfad, d.h. eine Sammlung von Verzeichnissen, in denen er nach Include-Dateien sucht. Da der Compiler Dein Projekt übersetzen kann, ist dieser Include-Pfad wohl korrekt gesetzt. Lint aber kennt diesen Pfad nicht. Du musst jetzt zwei Dinge tun: a) Herausfinden, wie der vom Compiler genutzte Include-Pfad heißt b) Herausfinden, wie Du lint diesen Include-Pfad beibringen kannst Da es viele unterschiedliche Möglichkeiten gibt, einem Compiler einen Include-Pfad beizubringen (Kommandozeilenparameter bei Aufruf, Environmentvariable etc.), kann Dir kein Universalrezept genannt werden, zumal Du praktischerweise auch unterschlagen hast, welchen Compiler oder gegebenenfalls welche IDE Du verwendest. lint wird ebenso wie der Compiler verschiedene Mechanismen kennen, einen Include-Pfad mitgeteilt zu bekommen - die sind im Manual beschrieben. Möglicherweise verwirrt Dich ja die Möglichkeit, das gleiche auf verschiedenen Wegen zu erreichen. Aber auch hier kann ich Dir keine Universallösung nennen, allein schon, weil ich Deine lint-Dokumentation nicht kenne. Prinzipiell: Bei Verwendung von Environmentvariablen gibt es genau eine, in der auch mehrere Teilpfade drinstehen können, die durch Semikola getrennt werden. Das kann dann so aussehen: INCLUDE=c:\test\bla;c:\sonstwas\fusel Bei der Nutzung von Kommandozeilenparametern werden diese Teilpfade einzeln übergebem und der jeweilige Parameter wiederholt, das kann dann so aussehen: irgendwas.exe -I c:\test\bla -I c:\sonstwas\fusel Sowohl die Namen als auch die genaue Syntax hängen natürlich von Deinen Werkzeugen ab, die ich hier nicht kenne. Das Prinzip aber bleibt das gleiche.
Hallo Rufus, vielen Dank für Deine ausführliche und schnelle Antwort. Das mit dem INCLUDE-Pfad habe ich auch schon etwas ausprobiert, aber leider nicht weitergekommen. Ich werd weitersuchen... Gruß Anderl
Es wär schon mal eine Hilfe, wenn man ein kleines Testprojekt hätte, das aus 1 C-File und 2 Header Files in einer Subverzeichnis Struktur besteht. Also einfach nur dein Problem auf das momentan wesentliche konzentriert und abgespeckt. Die Frage lautet dann: Wie sieht der Compiler Aufruf aus? Und zwar so, dass fehlerfrei compiliert wird. Wie sieht der PC-Lint Aufruf dazu aus? Und dann vergleichen wir mal die Aufrufparameter und gleichen das mit der Situation der Files in den einzelnen Verzeichnissen ab. Das das C-File in beiden Fällen im Tool-Aufruf auftauchen wird, ist klar. Aber was ist an den jeweiligen Kommandos sonst noch angegeben?
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.