Forum: PC-Programmierung eigene features.h unter Linux gcc


von Zelda (Gast)


Lesenswert?

Hallo,
wir haben ein Projekt bekommen, welches unter Windows gebaut wurde. Dort 
gibt es eine Datei mit dem Namen features.h
Jetzt sollen wir das ganze Projekt in qt-creator unter Linux mit gcc 
bauen.
Vom vorgegebenen Code dürfen wir aber ncihts ändern. Jetzt ist das 
Problem, dass diese features.h inkludiert wird Linux inkludiert aber 
anscheinen seine eigene und es kracht/bzw. kann nicht compiliert werden.
Für das Projekt haben wir in qt-creator eine .pro und mehrerer .pri 
dateien. In den .pri Dateien steht eigentlich welche Dateien gebaut 
werden soll.
Gibt es eine Möglichkeit genau zu sagen, welche features.h angezogen 
werden soll? Wenn wir die Datei umbenennen funktioniert es, dann haben 
wir allerdings was geändert, was wir vermeiden sollten.
Gibt es eine Möglichkeit genau zu sagen, dass die features.h vom Projekt 
angezogen werden soll? Oder kommen wir um eine Umbenennung nicht herum?

von Oliver S. (oliverso)


Lesenswert?

???

features.h ist ein Systemheader (des gcc-Compilers), der sollte gar kein 
Bestandteil des Projektes sein.

Was also ist jetzt genau das Problem?

Oliver

von Sven B. (scummos)


Lesenswert?

Eigentlich müsste das klappen, wenn das Verzeichnis was die Datei 
enthält mit -I in der compiler command line auftaucht. Wie sieht die 
aus?

von Oliver S. (oliverso)


Lesenswert?

Vermutlich hat das Projekt eine eigene features.h, und wurde unter 
Windows nicht mit gcc compiliert. Wenn die dann noch fälschlicherweise 
als Systeminclude per <> includiert wurde, statt mit ““, dann kann man 
wenig machen.

Aber dazu muß Zelda mal mehr Infos liefern.

Oliver

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Zelda schrieb:
> Vom vorgegebenen Code dürfen wir aber ncihts ändern.

Wenn ich so eine Scheiße schon lese ...

von MiWi (Gast)


Lesenswert?

Hannes J. schrieb:
> Zelda schrieb:
>> Vom vorgegebenen Code dürfen wir aber ncihts ändern.
>
> Wenn ich so eine Scheiße schon lese ...

solange das Herumfuhrwerken in selbiger bezahlt wird ist das schon ok.

Aber Du hast schon recht: irgendwer hat möglicherweise tief und fest 
geschlafen als der Auftrag an Land gezogen wurde.

von Rolf M. (rmagnus)


Lesenswert?

Hannes J. schrieb:
> Zelda schrieb:
>> Vom vorgegebenen Code dürfen wir aber ncihts ändern.
>
> Wenn ich so eine Scheiße schon lese ...

Ja, das ist schon von vorne herein Krampf.

Zelda schrieb:
> Gibt es eine Möglichkeit genau zu sagen, welche features.h angezogen
> werden soll?

Das gibt man als Teil der #include-Direktive an. #include <features.h> 
sucht erst bei den Systemheadern, dann bei denen des Programms. #include 
"features.h" macht es umgekehrt.

Was man noch versuchen könnte, wäre, den Header nochmal extra über die 
Kommandozeile mit -i (nicht -I) einzubinden, aber das würde ich als sehr 
unschönen Hack sehen. Besser wäre, es richtig zu machen, was aber wohl 
auf eine Änderung des Code hinaus läuft.

von Mark B. (markbrandis)


Lesenswert?

Zelda schrieb:
> Vom vorgegebenen Code dürfen wir aber ncihts ändern.

Die Vorgabe ist Schwachsinn. Der, der sie gemacht hat, hat gewiss nicht 
überprüft ob es überhaupt möglich ist sie einzuhalten.

von Sven B. (scummos)


Lesenswert?

Rolf M. schrieb:
> Das gibt man als Teil der #include-Direktive an. #include <features.h>
> sucht erst bei den Systemheadern, dann bei denen des Programms. #include
> "features.h" macht es umgekehrt.

Das dachte ich auch, aber in der gcc-Manpage steht:

           You can specify any number or combination of these options on 
the command line to search for header files in several directories.  The 
lookup order is as follows:

           1.  For the quote form of the include directive, the 
directory of the current file is searched first.

           2.  For the quote form of the include directive, the 
directories specified by -iquote options are searched in left-to-right 
order, as they appear on the command line.

           3.  Directories specified with -I options are scanned in 
left-to-right order.

           4.  Directories specified with -isystem options are scanned 
in left-to-right order.

           5.  Standard system directories are scanned.

           6.  Directories specified with -idirafter options are scanned 
in left-to-right order.

Ich verstehe das so, dass Verzeichnisse, die mit -I angegeben sind, 
immer zuerst durchsucht werden, oder? Sprich, wenn es ein features.h in 
./include/ gibt und ich -I./include/ mache, sollte es immer das nehmen 
vor dem in /usr/include, egal ob ich die "" oder die <> Syntax benutze.

von Oliver S. (oliverso)


Lesenswert?

Ja.
Noch genauer lässt sich das mit -quote und -isystem angeben.

Oliver

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

grrr...

-iquote

Oliver

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.