- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个工具来解析 C 系列源代码项目,基本上遵循这两个教程 1 2在 ubuntu 12.04 上的 clang 3.4 (trunk 192426) 上。
基于offical tutorial ,它说我可以通过 -p
传递 compile_commands.json
,但是,如果我只输入 $ ./main -p [compile_commands.json 的路径]
,它会提示缺少位置参数。看来我仍然需要将所有文件名作为参数传递,如果项目真的很大,这是不切实际的。我更喜欢它可以简单地解析 compile_commands.json
中指定的所有文件而不询问,但无法找到如何打开它。
因为我找不到 CommonOptionsParser 的教程要进行任何自定义操作,我使用 CompilationDatabase类代替。有一个虚拟访问者为 VisitStmt
、VisitDecl
和 VisitType
返回 true
,因此我将跳过它。 main
函数非常简单:
int main(int argc, const char **argv) {
string errorMsg = "";
CompilationDatabase *cd = CompilationDatabase::autoDetectFromDirectory (argv[1], errorMsg);
ClangTool Tool(*cd, cd->getAllFiles());
int result = Tool.run(newFrontendActionFactory<ExampleFrontendAction>());
return result;
}
我选择opencv
使用 cmake 来解析compile_commands.json的正确性(对吗?)。但是,出现了很多错误(附在最后)。 LibTooling 提示找不到 stdarg.h
、stddef.h
或 emmintrin.h
。这是FAQ对于 clang,但它说明了为什么会发生这种情况,但没有说明如何在使用 libtooling 时解决该问题。将所有参数传递给 clang 的 clang -###
可以解决这个问题,但是如何在使用 libtooling 时传递这些参数呢?
# include <stdarg.h>
^
1 error generated.
Error while processing /home/jcwu/repos/opencv/3rdparty/openexr/IlmImf/ImfCompressionAttribute.cpp.
In file included from /home/jcwu/repos/opencv/3rdparty/libjpeg/jmemansi.c:16:
/home/jcwu/repos/opencv/3rdparty/libjpeg/jinclude.h:35:10: fatal error: 'stddef.h' file not found
#include <stddef.h>
^
1 error generated.
Error while processing /home/jcwu/repos/opencv/3rdparty/libjpeg/jmemansi.c.
error: no suitable precompiled header file found in directory '/home/jcwu/repos/opencv/modules/legacy/precomp.hpp.gch'
1 error generated.
Error while processing /home/jcwu/repos/opencv/modules/legacy/src/hmmobs.cpp.
In file included from /home/jcwu/repos/opencv/3rdparty/libwebp/enc/quant.c:17:
In file included from /home/jcwu/repos/opencv/3rdparty/libwebp/enc/../dsp/../enc/vp8enci.h:17:
/usr/include/string.h:34:10: fatal error: 'stddef.h' file not found
#include <stddef.h>
^
1 error generated.
Error while processing /home/jcwu/repos/opencv/3rdparty/libwebp/enc/quant.c.
In file included from /home/jcwu/repos/opencv/modules/imgproc/opencv_test_imgproc_pch_dephelp.cxx:1:
In file included from /home/jcwu/repos/opencv/modules/imgproc/test/test_precomp.hpp:12:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/iostream:40:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/ostream:40:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/ios:39:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/iosfwd:42:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/postypes.h:42:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/cwchar:46:
/usr/include/wchar.h:40:11: fatal error: 'stdarg.h' file not found
# include <stdarg.h>
====更新====
阅读CommonOptionsParser.cpp源代码。它使用 FixCompilationDatabase 通过 -- 之后的参数猜测 CompilationDatabase,然后在 -- 之前传递参数以用于自定义(仅 CommonOptionParser 中的 -p)选项。就我而言,compile_commands.json 是必需的,因此我可以跳过使用 CommonOptionsParser。
因此,当我有compile_commands.json时,我的问题减少到如何将这些选项从“clang -###”传递到LibTooling?我应该为我想要解析的每个文件调用 shell 命令吗?
====更新====
我认为修改compile_commands.json可能会更容易。我不确定为什么 CMake 生成的compile_commands.json不会正确包含我的系统头文件文件夹,因为CMakeList.txt生成的Makefile可以正确编译,为什么compile_commands.json会错过很多东西。
最佳答案
我在使用 python 绑定(bind)时遇到了类似的问题。
[<Diagnostic severity 4, location <SourceLocation file '/usr/include/stdio.h', line 33, column 11>, spelling "'stddef.h' file not found">]
在“提示”部分
http://clang.llvm.org/docs/LibTooling.html
他们提到默认包含路径是
$(dirname /path/to/tool)/../lib/clang/3.3/include
这里的想法似乎是,预计您的工具将从 bin 目录执行,该目录也包含 clang 可执行文件本身。通常,这将是一个系统目录,因此从该目录向上将有一个 lib 目录,其中包含 clang/3.4/includ
e 目录。所以我手动包含$(which clang)../lib/clang/3.4/include
到解析器。在 python 中,这看起来像
translation_unit = index.parse("test.cc",["-I/home/archgoon/usr/local/lib/clang/3.4/include"])
这导致 translation_unit.diagnostics
是一个空列表。
关于clang - libtooling 找不到 stddef.h 或其他 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19642590/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!