感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Sublime Text2でJavaやC,C++のコンパイルと実行を行う方法のまとめ。

スポンサーリンク

ことば

「1番の下手くそでいよう」
・・・こうして僕は、人はどんな仲間と一緒にやるかで腕を上げることもあれば落とすこともあると学んだ。
チームで1番下手くそでいるのは、バンドで一番下手くそでいるのと同じ効果がある。どういうわけか自分自身が賢くなるんだ。話し方や書き方さえ以前より知的になる。自分の生み出すコードや設計が以前よりエレガントになり、難しい問題をますます創造的なソリューションで解決できるようになる。
情熱プログラマー ソフトウェア開発者の幸せな生き方

Sublime Text上でJavaのコンパイルや実行を行う。

1.Sublime TextとJDKはインストール済みとする。
2.Sublime TextのPreferences > Browse Packagesを選択
3.エクスプローラが開かれるので「Java」フォルダの中へ。
4.JavaC.sublime-buildというファイルを開く
中を以下のように書き換える。

{
 "cmd": ["javac", "$file_name","&&","java", "$file_base_name"],
 "file_regex": "^(...*?):([0-9]*):?([0-9]*)",
 "path": "C:\\Program Files\\Java\\jdk1.7.0_04\\bin\\",
 "selector": "source.java",
 "shell": true
}

pathは「\\」というように区切りを\\のように設定することに注意。
エスケープされてしまうので、2連続で「\」を書くこと。
5.Tools > Build System > JavaC.を選択。
6.javaのファイルをSublime Textで開く。
7.tools > buildかあるいはCtrl+bでビルドが実行できる。
Sublime Textでビルドした時に

[Decode error - output not utf-8]

というエラーが出た場合は、以下のように,encodingを指定して対処する。"shell": trueの後ろに「,(カンマ)」を付けるのを忘れずに。

{
 "cmd": ["javac", "$file_name","&&","java", "$file_base_name"],
 "file_regex": "^(...*?):([0-9]*):?([0-9]*)",
 "path": "C:\\Program Files\\Java\\jdk1.7.0_04\\bin\\",
 "selector": "source.java",
 "shell": true,
 "encoding": "cp932"
}

・参考
http://www.ryanburch.me/sublime-text-2-compile-and-run-java-code/

それでも

'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

というエラーが出た場合は、
ちゃんとpathに「binの下まで」パスが通るようにしてあるかなどを確認するといい。

※なお、Java環境変数の設定(JAVA_HOME)は以下。
コントロールパネル→システムとセキュリティ→システム→システムの詳細設定→環境変数

ここまでやっても、今度はCLASSPATHの設定らへんで行き詰まった。カレントディレクトリにCLASSPATHが通っていないようだ。
Testクラスを実行しようとしたら、こんなエラーが出たのだ。

エラー: メイン・クラスTestが見つからなかったかロードできませんでした
[Finished in 0.7s with exit code 1]

ここまでくると意地である。以下の参考URLを見て自分でSublimeのビルドをいじってみる。
http://sublimetext.info/docs/en/reference/build_systems.html

が、なんかうまくいかなかった。今度は以下を見て、自分でJava実行バ用ッチを作成する作戦に出た。
http://www.compilr.org/compile-and-run-java-programs/1251/

C:\Program Files\Java\jdk1.7.0_04\bin以下に、こんなバッチを置く。ちなみに環境は当然ながらWindowsである。

・runJava.bat

@ECHO OFF
cd %~dp1
ECHO Compiling %~nx1.......
IF EXIST %~n1.class (
DEL %~n1.class
)
javac %~nx1
IF EXIST %~n1.class (
ECHO -----------OUTPUT-----------
java -cp . %~n1
)

最後の「-cp .」がポイントだ。
前の失敗はカレントディレクトリにクラスパスが通っていなかったからメインクラスを見つけることができなかったのだ。
やっと出てきた実行結果は以下の通り。

Compiling Test.java.......
-----------OUTPUT-----------
hello, world!
[Finished in 0.7s]

やっとSublime Text2でJavaのコンパイル&実行ができた。

コンパイルしたJavaは以下の通り。

class Test {
	public static void main(String[] args) {
		System.out.println("hello, world!");
	}
}

Sublime TextでC++をビルドする

tools > Build System > New Build System

'gcc' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
[Finished in 0.1s with exit code 1]

ここを参考に、
http://stackoverflow.com/questions/11370646/sublime-text-linux-gcc-build-for-simple-c-programs

{
"cmd" : ["gcc", "$file_name", "-o", "${file_base_name}.exe"],
"selector" : "source.c",
"shell":false,
"working_dir" : "$file_path",
"encoding": "cp932"
}

shell:falseに変えてみた。
すると、

[Error 2] 指定されたファイルが見つかりません。

のようなエラーが出てきた。

なんだかうまくいかないけれど、結局C.sublime-buildを以下のように変更すると、コンパイル(compile)できるようにはなった。

{
"cmd" : ["gcc", "$file_name", "-o", "${file_base_name}.exe"],
"selector" : "source.c",
"shell":false,
"path": "C:\\MinGW\\bin\\",
"working_dir" : "$file_path",
"encoding": "cp932"
}

※tools > Build Systemは「C」を指定しています。

あとは実行するまでだけど、どうすればいいか。
こうすればよかった!

{
"cmd" : ["gcc", "$file_name", "-o", "${file_base_name}.exe"],
"selector" : "source.c",
"shell":false,
"path": "C:\\MinGW\\bin\\",
"working_dir" : "$file_path",
"encoding": "cp932",
"variants":
 [
  {
   "name": "Run",
   "cmd": ["${file_base_name}.exe"]
  }
 ]
}

これで、Ctrl + bでコンパイル→ Ctrl + shift + bで実行
することができる。
C++のファイルはこちら

#include <stdio.h>

int main()
{
    printf("hello, C++!");
    return 0;
}

で、コンパイル(ctrl + b)はこうなる。

[Finished in 0.4s]

実行(ctrl + shift + b)だとこうなる。

hello, C++![Finished in 0.1s]

ちなみにSublime TextでJavaScriptの構文チェックやSublime Text上でevalなどができるようになるためには、こちらの記事を参照ください。
http://d.hatena.ne.jp/sho322/20130706/1373097442

感謝のプログラミング

今回で感謝のプログラミングは【257時間目】
10000時間まで、あと【9743時間】