在sublime Text 3 上执行C++程序(Mac)

Sublime是一款非常不错的代码编辑器,对于我而言,sublime最大的好处就是C++代码和自己的读书笔记能在一个界面下进行编写,非常方便。但是sublime默认的C++编译方式有两个很大的缺点,一个是无法编译多个源文件,另一个就是无法在程序运行之后输入参数(也就是说,我们在sublime中无法使用std::cin).

#利用makefile执行含多个源文件的C++程序#

其实我对makefile并不是十分了解,只是用其去执行过几个小程序罢了,不过对于目前的我来说也足够用了。要使用sublime执行makefile,直接添加一个building tool就可以了。 到~/Library/Application Support/Sublime Text 3/Packages/User/目录下建立makefile.sublime-build文件。并在里面写入:

	{
		"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
		"working_dir": "${file_path}",
		"selector": "source.makefile",
		"cmd": ["bash", "-c", "make clean && make -f '${file}'"],
		"variants":
		[
			{
				"name": "Clean",
				"cmd": ["make", "clean"]
			},
			{
				"name": "Run",
				"cmd": ["make", "run"]
			}
		]
	}

这是一个sublime-build文件的基本框架,其实只要前四行就可以了,指定文件名,工作路径(即文件所在路径),文件类型以及命令就行了。 不知道为什么,如果不删除*.o文件(以o结尾的文件)的话,即使你修改了源代码,再执行makefile文件还是修改前的情况,似乎压根就没有编译。 我想应该是makefile的执行逻辑是先看是否有*.o文件。如果有,就直接执行,没有的话在执行下面生成*.o文件的命令。所以每次执行前,最好删除掉所有的*.o这些目标文件。 很简单,在makefile里面加一个clean的目标:

	all:SimpleMCMain1.out
		./SimpleMCMain1.out #&& open -a Terminal.app SimpleMCMain1.out
	SimpleMCMain1.out:SimpleMCMain1.o Random1.o
		g++ -std=c++11 SimpleMCMain1.o Random1.o -o SimpleMCMain1.out
	SimpleMCMain1.o:
		g++ -std=c++11 -c SimpleMCMain1.cpp
	Random1.o:
		g++ -std=c++11 -c Random1.cpp

	clean:
		rm -rf *.o

然后在makefile.sublime-build里面再加入 make clean 的命令同时用&&符号连接原来的命令。

#利用终端解决cin无法运行的问题# 解决这个问题很简单,只要在g++的命令之后添加open -a Terminal.app并用&&符号连接这两个命令就可以了,这样每次执行程序,sublime就会打开终端,你就可以在终端输入参数。

	{
		"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
		"working_dir": "${file_path}",
		"selector": "source.c, source.c++",    
        "cmd": ["bash", "-c", "g++ -std=c++11 '${file}' -o '${file_path}/${file_base_name}.out' && open -a Terminal.app '${file_path}/${file_base_name}.out'"],
		"variants":
		[
			{
				"name": "Run",
				"cmd": ["bash", "-c", "g++ '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
			}
		]
	}

#补充# variants里面的配置我也不太理解,但是目前为止也还用不上,我也就懒得去管了。 我在makefile里面也尝试过去执行open -a Terminal.app 但是总是报错,不知道为什么。不过即使不能用cin也是没关系的,直接建立一个data.h头文件,在里面加入所有你需要输入的全局变量和其对应的值,就可以了。

double expiry = 2;
double strike = 2;
double spot = 1;
double vol = 0.5;
double r = 0.1;
unsigned long numberOfPaths = 1000000;
打赏还是要有的,万一有人打赏呢!