MUP1+Øvelse+2.2

toc =Øvelse 2.2=

Øvelse 1
Vi skal kompilere vores hello world program til target. Det gøres således:

Man kan tjekke hvilken arkitektur en fil er kompileret til via a kommandoen.

Vi kopiere programmet til "target"og eksekvere. code format="scheme" $ cp2tgt hello $ conn2tgt $ ./hello HELLO WORLD!!!1 code

Øvelse 2
Vii skal ændre vores makefile fra Øvelse 1.2 så den kompilere til target. Hvilket er ganske simpelt da vi bare skal ændre variablen til Herefter skal vi kompilere både til host og target.

Kompilere til host og eksekvere: code format="scheme" $ make g++ -c hello.cpp g++ -o hello hello.o $ ./hello HELLO WORLD!!!1 code

Kompilere til target og eksekvere: code format="scheme" $ make -f makefile.target arm-none-linux-gnueabi-g++ -c hello.cpp arm-none-linux-gnueabi-g++ -o hello hello.o $ cp2tgt hello $ conn2tgt $ ./hello HELLO WORLD!!!1 code //**make -f** bliver brugt til at definere en anden makefile end den standard//

Øvelse 3
Ligesom i øvelse 2 skal vi kompilere til både host og target samt eksekvere.

/Host:

code format="scheme" $ make g++ -c main.cpp g++ -c part1.cpp g++ -c part2.cpp g++ -o parts main.o part1.o part2.o $ ./parts This is part 1! This is part 2! code Target:

code format="scheme" $ make -f makefile.target arm-none-linux-gnueabi-g++ -c main.cpp arm-none-linux-gnueabi-g++ -c part1.cpp arm-none-linux-gnueabi-g++ -c part2.cpp arm-none-linux-gnueabi-g++ -o parts main.o part1.o part2.o $ cp2tgt hello $ conn2tgt $ ./hello This is part 1! This is part 2! code
 * make -f** bliver brugt til at definere en anden makefile end den standard//

Øvelse 4
For at lave en target Build configuration gør man følgende:

Project->Build Configurations->Manage->New

Her skriver du så navnet på din nye build configuration file. save og luk vinduet. derefter skal du ind i properties for den configuration og vælge en ny compiler.

Project->Properties I vinduet til venstre C/C++ Build->Settings->tool settings Vælg derefter din nye configurations fil øverst til højre.

Vi skal nu skifte de standard compilere ud til arm-none-linux-gnueabi-g++ de 4 vi skal ændre er: GCC C++ Compiler ændres fra command: g++ -> arm-none-linux-gnueabi-g++ GCC C Compiler ændres fra command: gcc -> arm-none-linux-gnueabi-gcc GCC C++ Linker ændres fra command: g++ -> arm-none-linux-gnueabi-g++ GCC assembler ændres fra command: as -> arm-none-linux-gnueabi-as

tryk derefter apply og du har nu en target run configuration

du kan nu inde i eclipse trykke på "hammeren" og vælge din egen target build configuration.

Øvelse 5
Vi skal nu lave en makefile som gemmer sin eksekverbare i et underbibliotek, henholdsvis ../host/ og ../target/.

Her er makefilen: code format="bash" SOURCES=hello.cpp OBJFILES=$(SOURCES:.cpp=.o) EXEC=hello host: CC=g++ host: DIR=host host: hello target: CC=arm-none-linux-gnueabi-g++ target: DIR=target target: hello

hello: hello.o   $(CC) -o ./$(DIR)/$(EXEC) ./$(DIR)/$(OBJFILES)

hello.o: hello.cpp @mkdir -p $(DIR) $(CC) -c hello.cpp -o ./$(DIR)/hello.o

clean: @echo "Cleaning project..." @rm -r target host

help: @echo "Commands: help clean" code Denne makefile kan kompilere for både host og target via kommandoerne eller. Den gemmer objekt filerne i underbiblioteket sammen med den eksekverbare da man ellers skulle mellem hver make. Default make er til host.

=Hvad har vi lært?= Vi har lært kompilere til forskellige CPU strukturer og vigtigheden af at vælge den rigtige kompiler. Som et hjælpemiddel til denne kompileringsjungle har vi lært at anvende makefiles samt Eclipse til at gøre det beskidte arbejde for os.