我一定错过了一些非常明显的东西,但由于某种原因,Microsoft C++ 编译器 (cl.exe) 的命令行版本似乎不支持在运行时仅报告其版本。我们需要它来编写 makefile 来检查我们工具的用户已安装的编译器版本(他们获得包含要在本地编译自己的代码的 makefile,因此我们无法控制他们的编译器版本)。
在 gcc 中,您只需提供选项 -v 或 --version 即可打印出漂亮的版本字符串。
在 cl.exe 中,您收到 -v 错误。
我已阅读 MSDN 文档和编译器在线帮助,但找不到仅打印编译器版本的开关。令人烦恼的是,您总是在编译器启动时获取版本...但您似乎无法启动编译器只是为了从中获取版本。
Finding compiler vendor / version using qmake看起来很相似,但只处理 gcc 的简单情况。
我正在用 VC++ Express 2005 尝试这个,如果这很重要的话。我希望不会,因为检测编译器版本最好以与编译器版本无关的方式完成:)
回复后更新:
- 不带任何参数运行 cl.exe 打印它的版本和一些帮助 文本。
- 这看起来最像 获取版本的便携方式, 跨vc版本。
- 然后你必须 解析多行输出,但是 并不太难。
- 我们这样做是在 最后,它起作用了。
最佳答案
您确定不能在没有任何输入的情况下运行 cl.exe 来报告其版本吗?
我刚刚测试了在 VS 2008、2005 和 .NET 2003 的命令提示符下运行 cl.exe,它们都报告了其版本。
2008 年:
d:\Program Files\Microsoft Visual Studio 9.0\VC>cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
对于 2005 年,SP 1(添加了安全标准 C++ 类):
C:\Program Files\Microsoft Visual Studio 8\VC>cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
2005 年:
C:\Program Files\Microsoft Visual Studio 8\VC>cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
对于 .NET 2003:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.6030 for 80x86
编辑
2010 年,它将遵循以下原则:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.XX.YYYYY.ZZ for 80x86
或取决于目标平台
Microsoft (R) C/C++ Optimizing Compiler Version 16.XX.YYYYY.ZZ for x64
2012 年:
Microsoft (R) C/C++ Optimizing Compiler Version 17.XX.YYYYY.ZZ for $$$
其中 $$$ 是目标平台(例如 x86、x64、ARM),XX、YYYYY 和 ZZ 是次要版本号。
2013 年:
Microsoft (R) C/C++ Optimizing Compiler Version 18.XX.YYYYY.ZZ for $$$
其中 $$$ 是目标平台(例如 x86、x64、ARM),XX、YYYYY 和 ZZ 是次要版本号。
2015 年:
Microsoft (R) C/C++ Optimizing Compiler Version 19.XX.YYYYY for $$$
其中 $$$ 是目标平台(例如 x86、x64、ARM),XX 和 YYYYY 是次要版本号。
关于visual-c++ - 从命令行查找 Microsoft C++ 编译器的版本(对于 makefile),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1233312/