I must be missing something really obvious, but for some reason, the command-line version of the Microsoft C++ compiler (cl.exe) does not seem to support reporting just its version when run. We need this to write makefiles that check the compiler version a user of our tool has installed (they get makefiles with code they are to compile themselves locally, so we have no control over their compiler version).
In gcc, you just give the option -v or –version to get a nice version string printed.
In cl.exe, you get an error for -v.
I have read the MSDN docs and compiler online help, and I cannot find the switch to just print the compiler version. Annoyingly, you always get the version when the compiler starts… but you seem not to be able to start the compiler just to get the version out of it.
Finding compiler vendor / version using qmake seemed similar, but only deals with the simple case of gcc.
I am trying this with VC++ Express 2005, if that matters. I hoped it would not, as detecting the compiler version is best done in a compiler-version-independent way 🙂
Update, after replies:
- Running cl.exe without any arguments
prints its version and some help
text. - This looks like the most
portable way to get at the version,
across vc versions. - You then have to
parse a multi-line output, but that
is not too difficult. - We did this in
the end, and it works.
Are you sure you can’t just run cl.exe without any input for it to report its version?
I’ve just tested running cl.exe in the command prompt for VS 2008, 2005, and .NET 2003 and they all reported its version.
For 2008:
For 2005, SP 1 (added Safe Standard C++ classes):
For 2005:
For .NET 2003:
EDIT
For 2010, it will be along the line of:
or depending on targeted platform
For 2012:
where $$$ is the targeted platform (e.g. x86, x64, ARM), and XX, YYYYY, and ZZ are minor version numbers.
For 2013:
where $$$ is the targeted platform (e.g. x86, x64, ARM), and XX, YYYYY, and ZZ are minor version numbers.
For 2015:
where $$$ is the targeted platform (e.g. x86, x64, ARM), and XX and YYYYY are minor version numbers.