> So since user explicitly build shared library, I think install shouldn't depend on it either.

Then the install target shouldn't install the shared library. Having it install libuv.$(SOEXT) without depending on it means it can install a stale version of the shared library.

> Also, when adding libuv.a and libuv.$(SOEXT) as dependencies, libuv.$(SOEXT) will fail. It looks like, libuv.a's build is changing directories and when doing libuv.$(SOEXT) immediately, it fails.

That's not exactly what happens but yes, that's a bug. I'll see if I can fix it.