visual-c++ - 从命令行查找 Microsoft C++ 编译器的版本(对于 makefile)

标签 visual-c++ makefile

我一定错过了一些非常明显的东西,但由于某种原因,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/

相关文章:

makefile - 如何在 Makefile 中使用 for、find 和通配符?

java - CMake 和 make 在错误的地方寻找 libjawt.so 文件

makefile - 当 grep 输出为空时,"grep THIS foo.txt > THIS.txt"在 Makefile 中给出错误,而不是在 bash 中给出错误

c# - C# 中的 void* 是什么?

c++ - 我可以检索包含非拉丁字符的路径吗?

gcc - 在没有共享链接的情况下链接共享库

build - 制作依赖于环境变量的目标

c++ - 加速字节模式扫描 C++

c++ - C++ 中的 4d 映射?

C++ Header #define 编译器错误