Le dossier de projet
Pour pouvoir ranger correctement ses codes sources, pour les modifier ou les corriger, on va utiliser des répertoires. On va essayer de réaliser la génération de code pour le SAS/C et gcc, en utilisant les mêmes fichiers sources. Tous les fichiers objets spécifiques (et incompatibles) seront rangés dans des répertoires distincts, comme ceci:

  test
  |
  |  test.c
  |
  |_ sas
  |  |  makefile
  |  |_ obj
  |  |_ bin
  |
  |_ gcc
  |  |  makefile
  |  |_ obj
  |  |_ bin

L'automate de compilation
Pour pouvoir compiler, on va décrire comment obtenir le fichier exécutable à partir d'un makefile.
gcc a sa propre syntaxe pour les makefile, mais la manière du SAS/C semble donner le même résultat.
La seule grosse différence est que le make du gcc a besoin d'une tabulation et pas d'un espace sous chaque étiquette.

Le makefile ressemblera à cela:

SRC=..
OBJ=obj
BIN=bin

target: $(BIN)/test

$(OBJ)/test.o: $(SRC)/test.c
	gcc -c -noixemul -o $(OBJ)/test.o $(SRC)/test.c

$(BIN)/test: $(OBJ)/test.o
	gcc -o $(BIN)/test $(OBJ)/test.o
	strip $(BIN)/test

clean:
	delete $(BIN)/test
	delete $(OBJ)/#?.o
make
lancera la ligne du gcc

make clean
détruira le fichier executable test et le fichier intermediaire test.o

Pour le SAS/C, le makefile ressemblera à cela:

SRC=
OBJ=obj
BIN=bin

CFLAGS= nostackcheck opt optpeep optgo

target: $(BIN)/test

$(OBJ)/test.o: $(SRC)/test.c
	sc $(CFLAGS) OBJNAME $(OBJ)/test.o $(SRC)/test.c

$(BIN)/test: $(OBJ)/test.o
	slink lib:c.o,$(OBJ)/test.o\
	to $(BIN)/test\
	lib lib:sc.lib,lib:amiga.lib\
	noicons