我正在使用Microsoft Visual Studio编译器cl.exe
编译的大型C / C ++项目。我正在为该项目准备一个compilation database。这只是一个包含命令列表的文件,为了编译每个源代码文件,需要运行这些命令。每个命令都具有编译器的名称,要编译的文件以及确定编译各个方面的一组编译器标志。
我想通过基于clang的自定义工具运行整个项目。为此,我只需将编译数据库JSON文件传递到该工具中。但是这里有一个问题。编译数据库文件在命令中使用cl.exe
编译器。现在cl.exe
和clang.exe
具有不同的编译器标志。例如,要禁用优化,cl.exe
将花费/Od
,而clang.exe
将花费-O0
。因此,为cl.exe
编写的编译命令在分配给clang.exe
时将不起作用。
因此,作为解决方案,我正在创建一个Python脚本来解析该JSON文件,并将MSVC编译器标志转换为相应的Clang编译器标志。在解析命令行标志时,我将它们编入字典中,其中的键是MSVC编译器标志的字符串,而数据是Clang编译器标志,以便快速替换它们。
现在我的问题是:
我如何知道哪些MSVC编译器标志对应于哪些Clang编译器标志?我实际上从哪里获取要填充此词典的数据?我正在寻找一张列出MSVC编译器标志及其对应的Clang编译器标志的表。或者,如果还不存在这样的表格,我希望回答者在问题的答案中提供这样的表格。
假设我不能为此项目使用clang-cl
。原因是该编译数据库的接收者是应用程序Doxygen和SourceTrail,它们使用编译数据库来构造AST并从中生成有关代码的文档。据我所知,它们不支持clang-cl
,只是常规的clang编译器,但是如果您知道如何使它们与clang-cl
一起工作,那么我会接受该答案。