CPIP是在Python中实现的C/C++预处理器。

cpip的Python项目详细描述


cpip是一个用python实现的c/c++预处理器。它忠实地记录了预处理的所有方面,并能产生可视化效果,使调试预处理变得更加容易。

预处理期间的任何一点。
*顶级工具,如``cpipmain.py``可以从命令行生成预处理器可视化。
*只需要python 2.7或3.3+
*完全文档化:https://cpip.readthedocs.io。
*免费软件:GNU通用公共许可证v2

安装
----


>您可以克隆公共存储库:

…代码块::console

$git clone git://github.com/paulross/cpip


,或者下载tarball:

。代码块::console

$curl-ol https://github.com/paulross/cpip/tarball/master


一旦您有了源代码的副本,就可以使用:

代码块::console

$python setup.py install

代码块::console

$python setup.py test



>可视化预处理
====

==顶层脚本``cpipmain.py``充当预处理器,为源代码文件或目录生成HTML和SVG输出。此输出使您很容易理解预处理器对源代码所做的操作。

以下是预处理单个Linux内核文件"cpu.c"时的一些输出(`complete output<;https://cpip.readthedocs.io/en/latest/\u static/index.html>;`)。"index.html"页显示了如何调用"cpipmain.py"[f1]。该页链接到该文件的预处理页:

。注释:Git Hub不调整图像大小,因此我们必须在这里有副本。https://github.com/github/markup/issues/295

…图片::屏幕截图/htmlinux_cpu.c_index.png
:alt:cpipmain.py的index.html登录页。
:width:640

此页有一个链接,可指向文件"cpu.c"的登录页,在顶部,此链接指向其他可视化源代码的页,``#包括``依赖项、条件编译和宏:

…图片::屏幕截图/htmlinux_cpu.c_home_top.png
:从Linux内核预处理cpu.c后的alt:cpip登录页。
:宽度:640


此页下方是预处理涉及的文件表:

。图片::屏幕截图/htmlinux_cpu.c_home_lower_edit.png
:alt:cpip从Linux内核预处理cpu.c后的登录页。
:宽度:480


source"把你带到``cpu.c``原始源的语法突出显示页。

…image::屏幕截图/htmlinux-cpu.c-itu-edit.png
:alt:cpu.c的注释源代码
:width:480

``cpu.c``登录页链接"翻译单元"会将您带到显示``cpu.c``完整翻译单元(即合并所有```包含``文件)的页面。本页附有注释,以便您了解翻译单元的哪个部分来自哪个文件。

…图片::截图/htmlinux_cpu.c_tu_edit.png
:alt:cpu生成的带注释的翻译单元。c
:宽度:480

显示由"include"指令创建的依赖项的页。这是一个非常丰富的页面,表示根位于左中的树。``#include``从上而下依次排列。每个块代表一个文件,大小与预处理标记的数量成正比。

…伊马格e::屏幕截图/svg_cpu_openingpage_10pc.png
:alt:svg包含图中弹出的文件堆栈示例。
:宽度:640

如果框是青色的,那是因为文件没有向翻译单元添加任何内容,通常是因为条件编译:

…image::屏幕截图/svg_cpu_filedetail.png
:alt:svg包含图中弹出的文件堆栈示例。
:宽度:640


页面是动态的,悬停在各个区域上提供了更多信息:

包含了
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

仅停留在文件框的左侧会生成一个弹出窗口,说明文件包含过程如何处理此文件,它有以下字段:

*inc:```` include``指令的文件名和行号。
*as:``` include``指令点的条件编译状态。
*how:`` include``指令的文本,后跟此文件所在的目录,此目录的前缀是"sys=`"(对于系统包含)和"usr=`"(对于用户包含)。image::屏幕截图/svgincpath.png
:alt:文件是如何包含的
:宽度:640


将鼠标悬停在文件框上方的文件名上,显示文件堆栈(子级在父级之下)。

image::屏幕截图/svg_cpu_filedetail_file stack.png
:alt:SVG包含图中弹出的文件堆栈示例。
:宽度:640

文件框左侧的彩色条表示预处理标记类型的比例,左侧是文件本身,右侧是文件及其子文件。要理解这些条上的图例:

…图像::屏幕截图/svg_cpu_filedetail_histlegend.png
:alt:预处理令牌类型的图例。
:宽度:640


要查看预处理令牌的实际计数,请将鼠标悬停在文件框上:

。图像::屏幕截图/svg_cpu_filedetail_token count.png
:alt:预处理标记类型的计数。
:宽度:640


对于大型项目来说变得非常复杂。`` py``生成一个简洁的表示,只显示条件指令。每个注释中的链接都会指向该文件的语法突出显示页。

…image::屏幕截图/htmlinux_cpu.c_condcomp.png
:alt:转换单元中的条件编译。
:宽度:640

遇到的所有宏:

…图像::屏幕截图/htmlinux_cpu.c_macro_top.png
:alt:宏页面的顶部,带有指向每个宏详细信息的下页链接。
:宽度:640


页面上的每个链接都会带您看到宏的描述,其中包含:

*宏名称,引用它的次数以及是否仍在预处理结束时定义。
*逐字宏定义(为长宏重写几行)。
*文件名和定义行号,链接。
*直接或间接使用宏的位置。这是一个包含指向使用点链接的文件路径表。
*依赖项,双向:
*此宏调用的宏。
*调用此宏的宏。

…图像::屏幕截图/htmlinux_cpu.c_macro_detail.png
:alt:macro bitmap_last_word_mask details:定义、定义位置、使用位置和双向依赖项。
:宽度:640


状态
----

图片::https://img.shields.io/pypi/v/cpip.svg
:目标:https://pypi.python.org/pypi/cpip

…图片::https://img.shields.io/travis/paulross/cpip.svg
:目标:https://travis ci.org/paulross/cpip

…图片::https://readthedocs.org/projects/cpip/badge/?version=latest
:目标:https://cpip.readthedocs.io/en/latest/?徽章=最新
:alt:文档状态

…图片::https://pyup.io/repos/github/paul ross/cpip/shield.svg
:目标:https://pyup.io/repos/github/paulross/cpip/
:alt:updates


license
----

版权所有(C)2008-2017 paulross

自由软件;您可以根据自由软件基金会发布的GNU通用公共许可证的条款重新分发和/或修改该软件;该许可证的第2版或任何更高版本。

有用,
但没有任何保证;甚至没有针对特定用途的适销性或适用性的暗示保证。有关详细信息,请参阅GNU通用公共许可证。

MA 02110-1301 USA.


credits
——



此包是使用Cookiecutter和"Audreyr/Cookiecutter Pypackage"项目模板创建的。


_ Cookiecutter:https://github.com/audreyr/Cookiecutter
。_` audreyr/cookiecutter pypackage`:https://github.com/audreyr/cookiecutter pypackage

也非常感谢多年来主持这个项目的"sourceforge<;http://cpip.sourceforge.net/>;"。准则:脚注

…[f1]调用它的是:

…代码块::sh

$python3 cpipmain.py-kp-l20-o../../out/linux/cpu-s-stdc-uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu-stdc-uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu-d位/u long=64-d配置uuhz=100-d uuuuuuuuuuuuuuuux86-uuuuuuuu64-d-uuuuuuuuuuuuuuuuuuuuuuuuuuu_has_extension=\uu has_feature-d\uu has_attribute=\uu has_feature-d_ has_include=u has_u特性-p~/dev/linux/linux-3.13/include/linux/kconfig.h-j/usr/include/-j/usr/include/c++/4.2.1/tr1/-j/users/paulross/dev/linux/linux-3.13/include/-j/users/paulross/dev/linux/linux-3.13/include/uapi/-j~/dev/linux/linux-3.13/arch/x86/include/uapi/-j~/dev/linux/linux-3.13/arch/x86/include/-j~/dev/linux/linux-3.13/arch/x86/include/generated/~/dev/linux/linux-3.13/kernel/cpu.c


===
==history
==

<0.9.7 beta发行版(2017年10月4日)
=--


*小补丁。
*性能优化。
*用2个CPU在5小时内构建CPython源代码树。
*文档改进。


0.9.5 beta发行版(2017年10月3日)
=--

*迁移从SourceForge到Github。

0.9.1(2014-09-03)
----


0.9.1版,各种小补丁。在Python2.7和3.3上进行了测试。

cpip现在在python 2.7、3.3上测试。版本0.9.1。更新的文档。

alpha版本(2012-03-25)
功能变化很小。cpip现在在python 2.6、2.7、3.2上进行了测试。增加了大量的文档。

alpha版本(2011-07-14)
它是在bsd/linux上测试的,很可能在windows上工作(尽管在该平台上有些单元测试会失败)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么只为字符数组重载println方法,而不为字符串、整数等其他数组重载?   java将快速线程返回到池中,而不是等待慢速线程   创建jar文件时java SwingWorker不工作   java如何将依赖注入RabbitListener   java如何在gradle任务中通过scp复制目录?   java在MySql数据库中创建表时,遇到NullPointerException   java HTTP Status 500 Servlet执行引发异常   在JAVA中对arraylist使用继承时出错   java PowerMockito未完成存根异常   如果没有错误/警告增加到某个极限,java是否停止在eclipse中构建项目或使用maven?   java Robolectric如何测试DateFormat。getBestDateTimePattern()   google云平台GCP数据存储Java API,构建一个空值实体   VerifyListener和FocusListener之间的java冲突   安卓是否可以在Java中的另一个方法内部强制调用一个方法?   JavaWindows7、JDK1.8、SpringBoot应用程序JAR在方法安全性方面占用了大量时间。getProviders()返回   Bean提供程序的java错误消息   java Slick动画每帧必须有一个持续时间   java无法在Trie中设置isLeaf标志   java为什么JVM不能创建包含main方法的类的对象,以便从该类访问main方法,如果它具有该类的名称?   java Apache Camel+CXF端点身份验证