Well, I found the problem with FreeBSD. [1] It seems that make acts very oddly when a subdirectory called obj exists and it changes into that directory before doing any compilations. And since my makefile uses relative directories of course they're going to fail since the directories are relative to the parent directory, not to the one named obj.
Funny, I never encountered this problem before using make.
Then again, I never used a directory named obj before either, but I didn't think that would matter.
While the man page for make(1) under FreeBSD makes mention of obj it doesn't exactly describe this behavior. Sigh.