PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : gcc erkennen?



bluebrother
09.11.2005, 02:51
Hi,

ich möchte vorhandenen Code so umschreiben dass er sich mit dem avr-gcc bauen lässt. Soweit kein Problem, aber ich würde gerne das über defines machen, damit der "alte" Compiler auch noch "kann". Dazu müsste der Preprocessor den gcc erkennen ... Jetzt such ich da das passende define dazu. __GCC__ scheint vom avr-gcc nicht definiert zu werden. Any hints?

PicNick
09.11.2005, 08:59
Kannst du nicht in der make-file selber was eintragen ?

Andererseits kannst du ja jedes x-beliebige symbol nehmen, wo sich die Kompiler unterscheiden. (Auch das nicht-vorhandensein)

SprinterSB
09.11.2005, 09:18
GCC listet dir alle (impliziten) defines auf mit

xyz-gcc -E -dM dummy.c

Für ein backend xyz gibt es die defines XYZ und __XYZ, für AVR also AVR und __AVR.

Ebenfalls interessant für dich sind
__GNUC__
__GNUC_MINOR__
__GNUC_PATCHLEVEL__

Wenn xyz-gcc -v dir sagt "gcc version a.b.c", dann bekommst du a, b und c über obige 3 Makros.

bluebrother
09.11.2005, 09:36
ich hab zwischenzeitlich noch ne andere Möglichkeit gefunden:
#if CC == gcc
/* wenn gcc kompiliert */
#endif

Ansonsten hab ich ja gerade ein Symbol gesucht wo sich die Compiler unterscheiden -- und da wäre eins was für den gcc speziell ist halt optimal ;-) Weiß jemand ob es da irgendwelche Probleme mit dem CC geben kann? Interessanterweise wird das auch ohne Makefile gesetzt, also wenn ich den gcc einfach so aufrufe.

SprinterSB
09.11.2005, 10:21
Nö, da hätt ich Einwände. gcc ist bestimmt kein #define von GCC.
CC ist ne implizite make-Variable (so wie CFLAGS, etc). Wie kommst du da im Präprozessor dran?
Dann müsste so was wie -DCC=$(CC) im Makefile stehen.
Jedenfalls wird für CC kein define berichtet mit -E -dM von oben.
Oder #if CC == gcc ist immer wahr, weil beide undefiniert sind.

Mit
#ifdef __GNUC__
#if defined (__GNUC__)
sollte es gehen.

bluebrother
09.11.2005, 11:08
tatsächlich, CC scheint auf alles zu matchen -- habs mal ausprobiert:
#if CC == gcc
#warning gcc
#endif
#if CC == icc
#warning icc
#endif

wirft mir sowohl gcc als auch icc raus. Werde wohl doch das __GNUC__ nehmen. Find ich sowieso schöner ;-)

kater
09.11.2005, 13:10
In der fleury lib gibt es sowas.


#if (__GNUC__ * 100 + __GNUC_MINOR__) < 303

#error "This library requires AVR-GCC 3.3 or later, update to newer AVR-GCC compiler !"

#endif