Developing cross platform program/game from ground up - part 3
Ok, now I'm going explain a bit more about Makesfiles, and also try to condense this makefile.os4 and makefile.os3 and makefile.linux into one file.
Forst of all now we description how to build 4 different .o files, but we are using gcc to generate this files in the same way.
obj/display.o:
gcc os3/display.c -o obj/display.o -c
obj/filesystem.o:
gcc os3/filesystem.c -o obj/filesystem.o -c
obj/joystick.o:
gcc os3/joystick.c -o obj/joystick.o -c
obj/audio.o:
gcc os3/audio.c -o obj/audio.o -c
however this can be written as.
obj/%.o: $(os)/%.c
gcc $< -o $@ -c
I know this looks cryptic but what it does is when compiler is looking for obj/filesystem.o it will use label obj/%.o as it matches the filename, $(os)/%.c means that linux/filesystem.c is needed by obj/filesystem.o.
The next line gcc $< -o $@ -c work like this.
$< is replaced by whats after the label so its going to be $(os)/%.c and this translated into linux/filesystem.c
$@ is synonym with the name to compile.
So if this is the filesystem that is compiled it will be interpreted by the compiler as:.
gcc linux/filesystem.c -o obj/filesystem.o -c
so this two lines do the same as the 8 line in the first example.
And also you can easily change build target to OS4 or OS3 or Linux or what ever you like.
By setting os=linux or os=os4 or os=os3, simple do you agree?