Forum: Mikrocontroller und Digitale Elektronik [AVR-GCC,CMake,Eclipse] interne gcc macros nicht im Indexer


von Heiko L. (drcaveman)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich habe jetzt schon länger nichts mehr mit den AVRs gemacht und schon 
geht es nicht mehr so wie früher :(

Was ich benutze:
CMake 3.4.0 mit Generator: Eclipse CDT4 - MinGW Makefiles
Eclipse Photon, Kepler (File->Import->Existing Projects into Workspace)
Atmel AVR Toolchain 3.5.4.1709

Project->Build funktioniert wunderbar.

Leider bekommt der Indexer von Eclipse nicht mit, dass im Compiler 
intern _AVR_ATmega88_ gesetzt wird.

Es sind einige #defines vorhanden, die werden aber scheinbar von cmake 
in der .cproject gesetzt (cmake lässt wohl beim Erkunden der Toolchain 
schon einen Parser los, der weiß dann aber natürlich nichts vom 
letztendlich benutzen -mmcu).

Was muss ich in Eclipse setzen, dass es mit dem im Makefile angegebenen 
gcc und dessen "definitions" einen "macro parse" startet?

Schon einmal vielen Dank fürs Lesen :)

von Achim M. (minifloat)


Lesenswert?

Rechtsklick aufs Projekt, Properties

Im sich öffnenden Fenster bei dem c/c++ gedöns nach Paths/Symbols 
Ausschau halten.

Da dann bei Symbols AVR_Atmega88 für GNUC oder gleich alle Sprachen 
anlegen.

Bei includes kannst du Eclipse übrigens einen Pfad zu den beim Compiler 
liegenden Headerfiles zu den 'builtin' libs geben.

Übernehmen, Indexer rennt 1x, fertig.

von Heiko L. (drcaveman)


Lesenswert?

Ja, das kann man machen, ich meine aber, dass das früher automatisch 
ging.
Der Autodiscovery fehlt nun scheinbar irgendwie das mcu flag?
In der .cproject wurde von CMake folgendes eingetragen:

<profile 
id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
      <buildOutputProvider>
        <openAction enabled="true" filePath=""/>
        <parser enabled="true"/>
      </buildOutputProvider>
      <scannerInfoProvider id="specsFile">
        <runAction arguments="-E -P -v -dD 
${plugin_state_location}/${specs_file}" 
command="D:/avr8-gnu-toolchain/bin/avr-gcc.exe" useDefault="true"/>
        <parser enabled="true"/>
      </scannerInfoProvider>

Ich werde da mal den mcu switch eintragen, mal sehen was passiert.

von Heiko L. (drcaveman)


Angehängte Dateien:

Lesenswert?

Ich habe da gleich mehrere Sachen gefunden.

Es fängt eigentlich bei CMake an, da ruft der Generator für Eclipse 
Makefiles die built-in macros direkt nach der Wahl des Generators ab und 
übernimmt nur die Flags stdlib und std
(siehe CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake).

Ich sehe hier nur die Möglichkeit über die Variable 
CMAKE_CXX_COMPILER_ARG1 die mcu Option zu setzen. Das geht aber leider 
auch nur im Toolchain-File, weil der Schritt scheinbar nur bei der Wahl 
der Toolchain und nicht mehr beim generieren der Makefiles ausgeführt 
wird.
Ich habe die Datei mal angehängt.

In Eclipse habe ich mal testweise ein Cross GCC C-Projekt gestartet und 
alles so eingestellt, dass erfolgreich kompiliert werden kann (also auch 
die mcu Flag gesetzt).

Schaltet man nun beim Provider "CDT Cross GCC Built-In Compiler 
Settings" die Option "Allocate console in the Console View" ein so sieht 
man, dass, trotz C-Projekt, avr-g++ zur Ermittlung genutzt wird :(

Die Flags werden auch nicht übernommen, man muss also die mcu Option 
nochmal extra im Provider angeben :(
Es scheint also so als hätte der Provider seine eigenen ${COMMAND} und 
${FLAGS} Variablen. Obwohl ja bei COMMAND das Prefix "avr-" übernommen 
wurde...

Für Eclipse müsste CMake wohl in der Datei .cproject irgendwie die 
Variablen COMMAND und FLAGS für den Provider "CDT Cross GCC Built-In 
Compiler Settings" setzen und den Provider dann auch aktivieren.
Dazu müsste CMake aber auch die mcu Option als "unverzichtbar" ansehen 
und diese übergeben.

Ich denke mal das Toolchain-File pro mcu ist am einfachsten, die 
built-in macros werden dann über den Provider "Contributed PathEntry 
Containers" (.cproject Datei) an den Indexer übergeben.

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.