all: a.out liba.dylib libb.dylib libc.dylib libd.dylib CC ?= clang ifeq "$(ARCH)" "" ARCH = x86_64 endif CFLAGS ?=-arch $(ARCH) -g -O0 CWD := $(shell pwd) all: a.out hidden/libd.dylib a.out: main.o libd.dylib $(CC) $(CFLAGS) -o a.out main.o -L. -ld main.o: main.c $(CC) $(CFLAGS) -c main.c hidden/libd.dylib: b.o $(CC) $(CFLAGS) -dynamiclib -o hidden/libd.dylib d.o dsymutil -o hidden/libd.dylib.dSYM hidden/libd.dylib liba.dylib: a.o libb.dylib $(CC) $(CFLAGS) -dynamiclib -install_name "@executable_path/liba.dylib" -o liba.dylib a.o -L. -lb dsymutil liba.dylib a.o: a.c $(CC) $(CFLAGS) -c a.c libb.dylib: b.o $(CC) $(CFLAGS) -dynamiclib -install_name "@executable_path/libb.dylib" -o libb.dylib b.o dsymutil libb.dylib b.o: b.c $(CC) $(CFLAGS) -c b.c libc.dylib: c.o $(CC) $(CFLAGS) -dynamiclib -install_name "@executable_path/libc.dylib" -o libc.dylib c.o dsymutil libc.dylib c.o: c.c $(CC) $(CFLAGS) -c c.c libd.dylib: d.o $(CC) $(CFLAGS) -dynamiclib -install_name "$(CWD)/libd.dylib" -o libd.dylib d.o dsymutil libd.dylib d.o: d.c $(CC) $(CFLAGS) -c d.c clean: rm -rf *.o *~ *.dylib a.out *.dSYM hidden/*