I'd strongly advise you to use "CL" as a driver internally even when doing incremental links and creating a shared library.

For C++, the only flags you need are related to exceptions if you are linking with any code built with exceptions enabled. (By default, this includes pretty much every bit of C++ code.) Everything else is a matter of preference, but could probably be fielded with a few separate profiles. (Automatically linking against either debug or release versions of the libraries, enabling the optimizations for a given processor, and generally turning on "Wall" with debug.) A release build example of these for virtually any modern processor would be "/EHsc /MD /O2 /Ob2 /Og /Oi /Ot /Oy /G7 /arch:SSE /Zs:forScope,wchar_t /Wall /TP".

Soma