jak*_*om2 49 makefile visual-c++
我必须遗漏一些非常明显的东西,但出于某种原因,Microsoft C++编译器(cl.exe)的命令行版本似乎不支持在运行时报告其版本.我们需要这个来编写makefile,检查我们工具的用户已经安装的编译器版本(他们使用代码获取makefile,他们将在本地编译,因此我们无法控制他们的编译器版本).
在gcc中,你只需要选择-v或--version来打印一个漂亮的版本字符串.
在cl.exe中,-v会出错.
我已经阅读了MSDN文档和编译器在线帮助,我找不到只打印编译器版本的开关.令人讨厌的是,你总是在编译器启动时得到版本......但你似乎无法启动编译器只是为了从中获取版本.
使用qmake查找编译器供应商/版本似乎相似,但只处理gcc的简单情况.
我正在尝试使用VC++ Express 2005,如果这很重要的话.我希望它不会,因为检测编译器版本最好以与编译器版本无关的方式完成:)
回复后更新:
KTC*_*KTC 37
你确定你不能在没有任何输入的情况下运行cl.exe来报告它的版本吗?
我刚刚在VS 2008,2005和.NET 2003的命令提示符中测试了运行cl.exe,他们都报告了它的版本.
2008年:
d:\ Program Files\Microsoft Visual Studio 9.0\VC> cl
Microsoft(R)32位C/C++优化编译器版本15.00.30729.01 for 80x86
对于2005年,SP 1(添加了安全标准C++类):
C:\ Program Files\Microsoft Visual Studio 8\VC> cl
用于80x86的Microsoft(R)32位C/C++优化编译器版本14.00.50727.762
2005年:
C:\ Program Files\Microsoft Visual Studio 8\VC> cl
用于80x86的Microsoft(R)32位C/C++优化编译器版本14.00.50727.42
对于.NET 2003:
Microsoft(R)32位C/C++优化编译器版本13.10.6030适用于80x86
编辑
对于2010年,它将沿着以下方向:
Microsoft(R)32位C/C++优化编译器版本16.XX.YYYYY.ZZ for 80x86
或取决于目标平台
用于x64的Microsoft(R)C/C++优化编译器版本16.XX.YYYYY.ZZ
2012年:
用于$$$的Microsoft(R)C/C++优化编译器版本17.XX.YYYYY.ZZ
其中$$$是目标平台(例如x86,x64,ARM),XX,YYYYY和ZZ是次要版本号.
2013年:
用于$$$的Microsoft(R)C/C++优化编译器版本18.XX.YYYYY.ZZ
其中$$$是目标平台(例如x86,x64,ARM),XX,YYYYY和ZZ是次要版本号.
2015年:
用于$$$的Microsoft(R)C/C++优化编译器版本19.XX.YYYYY
其中$$$是目标平台(例如x86,x64,ARM),XX和YYYYY是次要版本号.
我今天遇到了同样的问题.如果cl编译器版本是15,我需要在nmake Makefile中设置一个标志.这是我提出的hack:
!IF ([cl /? 2>&1 | findstr /C:"Version 15" > nul] == 0)
FLAG = "cl version 15"
!ENDIF
Run Code Online (Sandbox Code Playgroud)
请注意,cl /?将版本信息打印到标准错误流,将帮助文本打印到标准输出.为了能够使用findstr命令检查版本,必须先将stderr重定向到stdout 2>&1.
上述想法可用于编写Windows批处理文件,该文件检查cl编译器版本是否<=为给定数字.这是代码cl_version_LE.bat:
@echo off
FOR /L %%G IN (10,1,%1) DO cl /? 2>&1 | findstr /C:"Version %%G" > nul && goto FOUND
EXIT /B 0
:FOUND
EXIT /B 1
Run Code Online (Sandbox Code Playgroud)
现在,如果你想在你的nmake Makefile中设置一个标志,如果cl版本<=15,你可以使用:
!IF [cl_version_LE.bat 15]
FLAG = "cl version <= 15"
!ENDIF
Run Code Online (Sandbox Code Playgroud)
小智 9
创建一个仅包含以下行的 .c 文件:
_MSC_VER
Run Code Online (Sandbox Code Playgroud)
或者
CompilerVersion=_MSC_VER
Run Code Online (Sandbox Code Playgroud)
然后预处理
cl /nologo /EP <filename>.c
Run Code Online (Sandbox Code Playgroud)
解析输出很容易。
只需运行它,不带任何选项。
P:\>cl.exe
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
93987 次 |
| 最近记录: |