‘壹’ C和C++语言有哪些主流开发工具
AppCode :构建与JetBrains’ IntelliJ IDEA 平台上的用于Objective-C,C,C++,Java和Java开发的集成开发环境
CLion:来自JetBrains的跨平台的C/C++的集成开发环境
Code::Blocks :免费C,C++和Fortran的集成开发环境
CodeLite :另一个跨平台的免费的C/C++集成开发环境
Dev-C++:可移植的C/C++/C++11集成开发环境
Eclipse CDT:基于Eclipse平台的功能齐全的C和C++集成开发环境
Geany :轻量级的快速,跨平台的集成开发环境。
IBM VisualAge :来自IBM的家庭计算机集成开发环境。
Irony-mode:由libclang驱动的用于Emacs的C/C++微模式
KDevelop:免费开源集成开发环境
Microsoft Visual Studio :来自微软的集成开发环境
NetBeans :主要用于Java开发的的集成开发环境,也支持其他语言,尤其是PHP,C/C++和HTML5。
Qt Creator:跨平台的C++,Javascript和QML集成开发环境,也是Qt SDK的一部分。
rtags:C/C++的客户端服务器索引,用于 跟基于clang的emacs的集成
Xcode :由苹果公司开发
YouCompleteMe:一个用于Vim的根据你敲的代码快速模糊搜索并进行代码补全的引擎。
构建系统
Bear :用于为clang工具生成编译数据库的工具
Biicode:基于文件的简单依赖管理器。
CMake :跨平台的免费开源软件用于管理软件使用独立编译的方法进行构建的过程。
CPM:基于CMake和Git的C++包管理器
FASTBuild:高性能,开源的构建系统,支持高度可扩展性的编译,缓冲和网络分布。
Ninja :专注于速度的小型构建系统
Scons :使用python scipt 配置的软件构建工具
tundra :高性能的代码构建系统,甚至对于非常大型的软件项目,也能提供最好的增量构建次数。
tup:基于文件的构建系统,用于后台监控变化的文件。
静态代码分析
提高质量,减少瑕疵的代码分析工具列表
Cppcheck :静态C/C++代码分析工具
include-what-you-use :使用clang进行代码分析的工具,可以#include在C和C++文件中。
OCLint :用于C,C++和Objective-C的静态源代码分析工具,用于提高质量,减少瑕疵。
Clang Static Analyzer:查找C,C++和Objective-C程序bug的源代码分析工具
‘贰’ python 中的lib目录一般 存放哪些文件呢
Lib文件夹里放的是python的标准库,例如json、os、urllib、urllib2等等很多很多常用的库,Lib文件夹里面还有个site-packages文件夹,用来放扩充库的
‘叁’ 如何自动生成lua绑定C++的代码
1. 这个py文件就是LLVM中拿出来的,是libclang的一个python绑定,利用的python的ffi机制(ctypes)写的,你可以在LLVM源码里找到它。
2. 这应该所有c++编译器的前端都有这个功能,比如这个简单点的robertoraggi/cplusplus · GitHub,atomic engine就拿它写了个绑定生成工具。
3. luabind,swig等等轮子好像挺多的,符合自己的需求就行。
‘肆’ 如何在Windows下给Vim安装YouCompleteMe
安装YCM有几个基本的要求:
包含Python支持的Vim版本。
LLVM/Clang,具体地说其实是libclang.dll这一个文件。
Haroogan预编译好的YCM库,主要是指ycm_core.pyd这个文件。
检查Vim的Python支持的办法是在cmd中运行python --version看看出来的Python前面是否有加号,或者在Vim中执行:echo has('python')。不过相信会看这篇文章的多半是从官网下的gvim74,很不幸地这个版本并不支持Python。
不过Haroogan同学很贴心地给出了全套解决方案,上面的三个基本要求他都提供了预编译好的版本:
带Python和其它一大票语言支持的Vim
LLVM for Windows
YCM
需要提醒的是,不知道什么原因,上面的bitbucket.org网站中正文里的链接都挂了,不过还好下载链接可以在左侧的Downloads里找到。
‘伍’ Python安装PyQt5时遇到这个问题该怎么解决
linux系统下Qt5编译好的程序在未安装Qt的系统下运行会报以下错误:
This application failed to start because it could not find or load the Qt platform plugin "xcb".
Reinstalling the application may fix this problem.
出现这个错误,主要是因为qt5为了在多平台下更方便移植,使用了一种新的技术-----platform abstraction system (QPA),而它中的库又依赖于Qt5中的一个库文件libQt5DBus.so.5,所以,只要打包时只要加上这个文件就可以了。
linux下qt5程序打包步骤如下
1、把以下7个库文件放到/usr/lib目录下
libQt5Widgets.so.5
libQt5Gui.so.5
libQt5Core.so.5
libicui18n.so.51
libicuuc.so.51
libicudata.so.51
libQt5DBus.so.5
2、拷贝Qt5安装目录中的platforms目录,使它和你的Qt程序同级目录
现在你可以双击你的程序运行了呵呵
‘陆’ cygwin 下使用很多命令都没有反应,的确是安装了,比如clang python3 还有pgrep等等 输入命令没反应
直接cd到命令所在目录能执行么?
如果cd到相应目录可以执行,那么设置下path参数即可。
‘柒’ llvm编译makefile152错误
llvm编译makefile152错误解决办法如下
由于该文件不是很必须的文件,所以可以尝试touch该文件
尝试安装libclang-common-9-dev。
‘捌’ 如何使用的libclang Python绑定跳过遍历AST的子树
的只是特定的节点。 它只是服务的宗旨,如何让刚特定节点 example.cpp文件:int i;
char var[10];
double tmp;
int add (int a, int b)
{
int r;
r=a+b;
return (r);
}
例如Python代码:import sys
from clang.cindex import *
index = Index.create()
tu = index.parse('example.cpp')
root_node = tu.cursor
#for further working with children nodes i tend to save them in a seperate list
#wanted nodes in extra list "result"
wanted_nodes = ['var', 'tmp']
result = []
node_list= []
for i in node.get_children():
node_list.append(i)
for i in node_list:
if i.spelling in wanted_nodes:
result.append(i)
#now result contains the two nodes "var" and "add"
#print the name
for i in result:
print i.spelling
#print the type
for i in result:
print i.type.kind
######OUTPUT#######
>>> var
>>> add
>>> TypeKind.CONSTANTARRAY
>>> TypeKind.DOUBLE
如果您希望每个数组的另外的U型得到它通过:result[1].type.element_type.kind
#######OUTPUT######
>>> TypeKind.CHAR_S
因为MODUL cindex.py是那么它不应该是很难找到如何获取你需要的。
2.
我不认为一个get_next_sibling在Python API,AST中的每个节点都知道所有的子,所以,跳绳无趣的子树可以很容易地通过简单地跳过他们在遍历父的子来完成。从礼Bendersky的有关libclang的Python API的优秀的博客文章的例子:
def find_typerefs(node, typename):
""" Find all references to the type named 'typename'
"""
if node.kind.is_reference():
ref_node = clang.cindex.Cursor_ref(node)
if ref_node.spelling == typename:
print 'Found %s [line=%s, col=%s]' % (
typename, node.location.line, node.location.column)
# Recurse for children of this node,
# skipping all nodes not beginning with "a"
for c in node.get_children():
if c.spelling.startswith ("a"):
find_typerefs(c, typename)
3.
在铛-C而言,enumsCXChildVisitResult有3个值 CodeGo.net,CXChildVisit_Continue跳过探望,所以游客要下一个兄弟。这样应该是在python了。