cpps 是 C++ 脚本的(伪)解释器
思路很简单,背后调用gcc来编译,然后运行生成的可执行文件。
* 不会弄脏你的目录
* 支持多个.cpp文件
* 可以链接库
* 支持预编译头文件
* 支持shebang
* 支持gcc支持的全部c++语法(必须的)
交互式执行地没有,毕竟是伪的。
需要用到
gcc 4.9.1
boost 1.57.0 (只用到了filesystem、program_options两个子库)
因为它并不是传统意义上的解释器,而是背后调用gcc先对源代码进行编译,然后再执行产生的exe程序的。
C++代码本身就不适合解释执行,
而我想要的不过是脚本的好处(而非解释器的):
就地编写,就地运行
不用创建复杂的工程
从edit->build->run的循环中删掉build的环节
因为C++代码编译的时间也不短,所以cpps会缓存第一次运行所产生的exe文件(放心,不会弄脏你的目录)。
另外,cpps还内建了一个全透明的build system,当你第一次运行脚本之后,如果你对代码又做了修改,再次运行脚本时,只有变动的部分才会被重新编译。
当然,前提是你的脚本由多个.cpp文件组成。
mkdir build-cpps cd build-cpps cmake ../cpps make make test
如果没有问题的话
sudo make install
特别注意:
我自己编译时用的是
gcc 4.9.1
boost 1.57.0 (只用到了filesystem、program_options两个子库)
比如hello.cpp
那你执行下面这行即可:
cpps hello.cpp
比如你的c++代码位于目录~/work/hello下,共有三个文件:
hello.cpp
foo.cpp
foo.h
如果你在hello.cpp中调用了foo.cpp中的某个函数,那么
你需要在hello.cpp中写
#include "foo.h"
然后将foo.cpp也加进你的Makefile中。
你只需要给上面这行#include添加一条注释即可
#include "foo.h" // using foo.cpp
这就相当于python的import
不需要什么Makefile
然后执行下边这行即可
cpps hello.cpp
比如pthread
你需要在命令行写-lpthread才能将该库链接进来
你只要在任何一个.cpp文件中加上这样的注释即可:
// linklib pthread
你还可以通过预编译头文件来加速
比如你打算将std.h搞成预编译头文件
那么只要在某个.cpp文件中加上这样的注释
#include "std.h" // precompile std.h
在你的hello.cpp文件第一行写上:
#!/usr/bin/env cpps
然后执行
chmod +x hello.cpp ./hello.cpp
感觉是不是很爽?
只可惜,这一行并不是合法的C++代码
cpps认它,别的编译器却不认它。
更好的做法是:不要在.cpp文件中直接添加shebang,而是新建一个扩展名为.cpps的文件,比如:
hello.cpps
然后在这个文件中的第一行写shebang,第二行给出.cpp脚本的路径(绝对路径、相对路径都可以),如下:
#!/usr/bin/env cpps hello.cpp
然后将这个.cpps文件设置成可执行的
chmod +x hello.cpps ./hello.cpps
咦?好像在个shell脚本中调用cpps hello.cpp即可
cpps --clear hello.cpp相当于先clear all,再build,然后运行。
如果你用新版本的cpps运行以前运行过的C++程序时遇到问题,可以这样试一下。
问题内容: 问题:我收到此错误消息: 导出:错误的解释器:无此类文件或目录 当我执行此bash脚本时: 但是bash路径似乎是正确的: 我究竟做错了什么?还是这是Lucid Lynx的错误? 我做了 问题答案: 第一行告诉Linux在哪里可以找到解释器。该脚本还应该可以通过执行,就像您执行的一样。 您很有可能使用Windows编辑器创建了此文件,该编辑器将在每行的末尾放置一个。这是dos / wi
我在Ansible脚本模块解释with_items变量时遇到了问题。 vsa_deploy_config/tasks/main.yml: vsa_deploy_config/vars/main.yml: 当我运行行动手册时,我收到以下错误: 任务[vsa_deploy_config:在中心服务器上部署VSA]* * * * * * * * * * * * * * * * * * * * * * *
我试图使用jobDSL插件中的pipelineJob函数生成Jenkins管道,但是无法将参数从DSL传递到管道脚本。我有几个项目使用本质上相同的Jenkinsfile,只是在几个步骤上有所不同。我正在尝试使用JobDSL插件动态生成这些管道,并解释其中我想要更改的值,以匹配DSL的参数。 我已经在管道脚本和DSL中尝试了几乎所有可能的字符串解释组合,但无法获得Jenkins /groovy来解释
问题内容: 有谁知道(或处理)在构建时如何从Java类文件中删除注释?当我使用Ant构建项目时,我想对项目中的特定软件包执行此操作。最欢迎使用任何ANT脚本或一些自定义代码。 问题答案: 编译文件中没有注释。
问题内容: 有谁知道(或处理)在构建时如何从Java类文件中删除注释?当我使用Ant构建项目时,我想对项目中的特定软件包执行此操作。最欢迎使用任何ANT脚本或一些自定义代码。 问题答案: 编译文件中没有注释。
; 该脚本使用 HM VNISEdit 脚本编辑器向导产生 ; 安装程序初始定义常量 !define PRODUCT_NAME "产品名称" !define PRODUCT_VERSION "产品版本号" !define PRODUCT_PUBLISHER "产品发布者" !define PRODUCT_WEB_SITE "http://testapp.com" #网址 !define PRODU
我第一次安装pymongo时使用的是easy_install,但它不起作用,所以我尝试使用pip,但仍然失败。 这在航站楼很好: 但是在我剧本的第10行 引发以下错误: 文件“test.py”,第10行, 我使用Apache和Python的标准Lion构建。还有其他人经历过吗? 谢谢 编辑:我还应该提到,在安装过程中,它抛出以下错误 然后接着说 非常奇怪。 我的系统。脚本中的路径返回为: ['/库
问题内容: 是否可以从Python脚本捕获Python解释器的输出? 是否可以从Python脚本捕获Windows CMD的输出? 如果是这样,我应该研究哪个librar(y | ies)? 问题答案: 如果您正在谈论的是脚本的“父级” python解释器或CMD.exe,那么不可能,这是不可能的。在每个类似POSIX的系统中(似乎现在您正在运行Windows,并且可能有一些我不知道的怪癖,YMM