Forum: Compiler & IDEs IAR: Mehrere Projekte, ein Output-File


von Marco (Gast)


Lesenswert?

Hallo!

Hoffe ich bin hier im richtigen Forum, weil es geht nicht um GCC, 
sondern um IAR Embedded Workbench  for MSP430 4.20.1 (4.20.1.50017). 
Wusste aber nicht, in welches Forum es besser passen würde.

Also, ich hab folgendes Problem:
In IAR schreibe ich gerade meine Firmware. Um die Übersicht ein wenig zu 
wahren, habe ich meine "Funktionsblöcke" in eigene Projekte gepackt.
Das Projekt mit der main.c ist mein "aktives Projekt"

Nun habe ich haber folgende Probleme:
* Wenn "Rebuild All" mache, wird nur das aktive Projekt kompiliert.
  Frage: Ist es möglich irgendwo einzustellen, dass er alle kompiliert?
* Kompiliere ich die anderen Projekte manuell Der Linker kann Funktionen 
aus einem c-File eines anderen Projekts nicht öffnen (habe diese über 
das inkludieren des entsprechenden h-files, in dem die Funktionen mit 
"extern" deklariert sind, gemacht)
  Frage: Was muss ich wo einstellen, dass alle Projekte zusammen ein 
Output-File ergeben?

Vielen Dank für eure Hilfe

Gruß
Marco

von Karl H. (kbuchegg)


Lesenswert?

Kann es sei, dass du da was verwechselst?

Ein Projekt ist üblicherweise die Sammlung aller *.c und *.h Files, die 
zusammengenommen ein komplettes Programm (oder Object-Library) ergeben.

Die Aufteilung eines C-Sourc Codes in mehrere *.c bzw *.h Files ist 
NICHT gleichbedeutend mit mehreren Projekten. Das ist immer noch 1 
Projekt. Nur sind dann eben mehrere *.c bzw *.h Files Teil des 
Projektes.

von Marco (Gast)


Lesenswert?

Hallo!

Karl heinz Buchegger schrieb:
> Ein Projekt ist üblicherweise die Sammlung aller *.c und *.h Files, die
> zusammengenommen ein komplettes Programm (oder Object-Library) ergeben.

Das sehe ich auch so. Des Wegen fasse ich ja auch z.B. alles was die DMA 
betrifft in ein Projekt zusammen, so dass ich eine Bibliothek erhalte, 
die ich/man später in anderen Projekten wiederverwenden kann.
Die Frag ist nur, wie ich das ERgebnis von Projekt A in Projekt B 
verwenden kann...

Karl heinz Buchegger schrieb:
> Die Aufteilung eines C-Sourc Codes in mehrere *.c bzw *.h Files ist
> NICHT gleichbedeutend mit mehreren Projekten. Das ist immer noch 1
> Projekt. Nur sind dann eben mehrere *.c bzw *.h Files Teil des
> Projektes.

Ist auch logisch. Aber das ist ja nicht mein Problem....


Nun zu meinen ursprünglichen Fragestellungen:
Inzwischen habe ich heraus gefunden, dass man mit dem sogenannten "Batch 
build" alle Projekte in einem Rutsch kompilieren kann.

Was mir also noch fehlt, ist die bereits eben genannte Frage:
Wie kann man das Ergebnis eines Projekts in einem anderen Projekt (des 
selben Workspaces) verwenden, so dass man das der Linker auch die 
entsprechenden Funktionen findet...?!?

Gruß
Marco

von Marco (Gast)


Lesenswert?

Hallo noch mal!

Evtl. noch ein paar ergänzende Hinweise:
Workspace besteht exemplarisch aus drei Projekten
* Projekt A
* Projekt B
* Projekt C

A ist das aktive Projekt und verwendet Funktionen von den Projekten B & 
C.
A wird als Executable kompiliert, B & C als Library.
In den Linker-Optionen von Projekt A wird das Output-Verzeichnis der 
Projekte B & C inkludiert. In den jeweiligen Output-Files von B & C 
befinden sich auch die kompilierten Libs mit der Endung *.r43.
Bei den ausgegebenen Parametern des Linkers werden die Output-Pfade von 
B &C als relativer Pfad korrekt angezeigt.

Dennoch geht es nicht...

Gruß
Marco

von Karl H. (kbuchegg)


Lesenswert?

Marco schrieb:

> In den Linker-Optionen von Projekt A wird das Output-Verzeichnis der
> Projekte B & C inkludiert.

Das wird nicht reichen.
Du musst auch die Libraries zum A-Programm dazulinken

Pfadangaben sind normalerweise einfach nur Hinweise an das jeweilige 
Werkzeug: Wenn du etwas suchst, dann könntest du es hier und hier 
finden.

Aber in erster Linie musst du dem Linker auch angeben, dass die 
entsprechenden Librariers mit dazu gehören, wenn A fertig gelinkt werden 
soll. Der Linker holt sich ja nicht einfach alle Libraries, die er 
irgendwo findet und linkt sie auf Verdacht mit ein.

von IsobarX (Gast)


Lesenswert?

Hallo Marco,

wie Karl es schon gesagt hat, musst Du die Libraries B & C ins 
Hauptprogramm verlinkt werden.

Anleitung:

1) Auf das Projektfenster A, das wie ein blaues Kästchen aussieht, mit 
einem Rechtsklick auf "Add" -> "Add files" -> Dateifilter - neben dem 
Öffnen-Button - auf "Library/Objetc Files" klicken -> die Libraries B & 
C einfügen. Da es einen Debug und Normalmodus gibt, muss also die 
Prozedur in beiden Modi durchgeführt werden.

MfG
IsobarX

von noob (Gast)


Lesenswert?

Hi Marco,
ich bin auch gerade dabei eine lib und eine app unter iar zu schreiben.
Ist es bei dir eigentlich auch so, dass beim debuggen der IAR durch die 
Lib steppt? sollten die lokalen funktionen nicht unsichtbar bleiben?

von Marco (Gast)


Lesenswert?

Hallo!

Vielen Dank für eure Antworten.
Hab noch eine Möglichkeit gefunden, meine Libs hinzuzufügen.
Mein Hinzufügen zum Linker-Command war leider nicht korrekt.
Unter den Projekt-"Optionen" => "Linker" => "Extra Options" kann dann 
pro Zeile die Bibliothek eingebunden werden, die dann z.B. so aussieht:
$PROJ_DIR$\..\XY\Debug\Exe\XY.r43

@noob:
Ja, ist bei mir auch so. Weiß jetzt aber nicht, ob es daran liegt, das 
bei mir alles in einem Workspace liegt. Aber ich sehe das nicht als 
Fehler, sondern nur als Vorteil, weil meine Libs muss ich ja auch 
debuggen... ;)

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.