我有一个cmake项目,我想使用clang-tidy实现现代化。为了避免一次发生太多事情,我只激活了modernize-use-override选项。然而,当我应用这一点时:
$> run-clang-tidy -header-filter='.*' -checks='-*, modernize-use-override' -fix对于项目,clang-tidy插入override说明符的多个实例,例如:
void update_sizes() override override override etc.我尝试遵循给这里的建议,并使用cmake创建一个json编译命令数据库:
$>cmake ../../ -DCMAKE_BUILD_TYPE=debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON通过将cmake设置为系统范围内的默认设置(使用update-alternative),我确保了clang编译器实际上是在拾取它。在这种情况下,cmake生成调用clang编译器的make文件。
我用的是Ubuntu 18.10和clang 7。
我也尝试过使用clang-6和设置cmake来生成ninja构建脚本,而不是make文件,但是结果总是一样的。
在应用修复之前,整个项目都可以使用gcc和clang进行良好的编译。
请注意,有一个类似的讨论这里,但建议是使用run-clang-tidy.py,这正是我正在做的。因此,我不认为这是重复的。
发布于 2018-11-05 13:36:01
这是您链接到的讨论中引用的相同问题,在我看来,它就像一个bug。你有几种选择:
发布于 2020-11-02 17:12:19
这是一个很老的问题,但clang 11中仍然存在问题,问题在于clang存储头文件路径的方式。在yaml文件中可以很容易地看到这一点。
在第一个yaml文件中:
'C:/SOURCES/APP/COMMON/CORE/../../../Libs/Sdk/Public/File.h‘:FilePath
在secod yaml文件中:
'C:/SOURCES/APP/COMMON/APPCORE/VIEWS/../../../../Libs/Sdk/Public/File.h‘:FilePath
上面的路径是相同的,但不是“clang应用替换”。
解决此问题的最简单方法是修改脚本“run-clang-tidy.py”,以便在运行“clang替代”之前修复yaml文件中的所有路径。
def FixPath(line):
value = line.find("'")
if value != -1:
left = line[:value]
right = line[value+1:len(line)-2]
right = "'" + os.path.normpath(right) + "'"
line = left + right.lower() + "\n"
return line
def FixYamlContent(tmpdir):
for replacefile in glob.iglob(os.path.join(tmpdir, '*.yaml')):
with open(replacefile, "r+") as file_rw:
lines = []
for line in file_rw:
if line.find("FilePath:") != -1:
line = FixPath(line)
lines.append(line)
file_rw.seek(0)
file_rw.writelines(lines)
file_rw.truncate()要使用上面的代码,您需要在函数FixYamlContent(tmpdir) apply_fixes之前调用函数。我不是python开发人员,上面的代码还没有经过充分的测试,但是您知道了。
https://stackoverflow.com/questions/53032915
复制相似问题