Forum: PC-Programmierung PC-Lint eigene Header einbinden


von Anderl (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Anderl (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.