今流行りの DUB を使ってみた
公式 URL
http://code.dlang.org/
Github
https://github.com/rejectedsoftware/dub
日本語解説(とてもありがたい)
http://codelogy.org/archives/2013/09/%E3%80%90d%E8%A8%80%E8%AA%9E%E3%80%91d%E8%A8%80%E8%AA%9E%E3%81%AE%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3%E3%80%81dub.html
http://qiita.com/yasei_no_otoko/items/2724eebab10f5cd0a02f
開発環境が Arch Linux なので、dmdとか dubとかは
$ yaourt -S dlang dub
で導入。
ちなみに community package なので yaourt は必須では無いです。
使用方法について。
上記の URL読めば大抵の使い方は分かる。
project $ dub init test Successfully created an empty project in '/home/user/Programming/D/project/test'.
project $ cd test test $ ls package.json public source views
test $ cat package.json { "name": "test", "description": "An example project skeleton", "homepage": "http://example.org", "copyright": "Copyright © 2000, Your Name", "authors": [ "Your Name" ], "dependencies": { } }
test $ ls source app.d
test $ cat source/app.d import std.stdio; void main() { writeln("Edit source/app.d to start your project."); }
必要なライブラリ等の情報は package.json の dependenciesに書いて、
エントリポイントになる app.dにコードを書いていく感じ。
プロジェクトの中で
test $ dub
とか叩くとコンパイルから実行までやってくれる。
test $ dub build
とか叩くと package.json の "name" で実行ファイルが作成される。
dependenciesに列挙したライブラリは
/home/user/.dub/packages の中に保存されるので、
綺麗にしたかったら .dubとか丸々消してしまえば良いのかな。
で、dub使って気になったのが
野良 github repositoryとかは登録出来ないっぽい?という事。
http://code.dlang.org/ に登録すれば引っ張ってこれるのだろうけど、
其処まででも無いかなぁと思ったので
ローカルにある外部ライブラリなり外部ソースコードを一緒にコンパイルする方法調べた。
結論としては、package.jsonに
"importPaths":[ path, ... ]
"sourceFiles":[ file, ... ]
"sourcePaths":[ path, ... ]
辺りの Key Value Pair を登録しといてやるとよしなにやってくれるっぽい。
test $ ls ../../mylib/adjustxml README.md adjustxml.d
こんなライブラリがあったとする。
"importPaths" に関して
- 列挙した path に -Iを付けてコンパイラに渡してくれる。
test $ cat package.json { ... "importPaths": [ "../../mylib/adjustxml" ] }
test $ dub build --verbose ... 省略 ... Compiling... dmd -c -oftemp.o -debug -g -wi -version=Have_test -I../../mylib/adjustxml -Jviews source/app.d Linking... dmd -oftest temp.o -g
"sourceFiles" に関して
- 列挙した files を全てコンパイラに渡してくれる。
test $ cat package.json { ... "sourceFiles": [ "../../mylib/adjustxml/adjustxml.d" ] }
test $ dub build --verbose ... 省略 ... Compiling... dmd -c -oftemp.o -debug -g -wi -version=Have_test -Isource -Jviews source/app.d ../../mylib/adjustxml/adjustxml.d Linking... dmd -oftest temp.o -g
"sourcePaths" に関して
- 列挙した path に含まれている *.d を全てコンパイラに渡してくれる。
- 気をつけなきゃいけない点?としては、sourcePaths使うと project/source を読みに行ってくれなくなるので、明示的に "source" ディレクトリを書いてやらねばならない。
test $ cat package.json { ... "sourcePaths": [ "../../mylib/adjustxml" ] }
test $ dub build --verbose ... 省略 ... Compiling... dmd -c -oftemp.o -debug -g -wi -version=Have_test -Isource -Jviews source/app.d ../../mylib/adjustxml/adjustxml.d Linking... dmd -oftest temp.o -g
実はここらへん、配布されてるパッケージの package.json眺めると簡単に分かる。
はてな記法全然分からないから凄く読みづらい…
取り敢えず自分用メモとして残しておく感じで。
これから DUBが D言語の標準 package managerになっていくという流れっぽいので、
今のうちから慣れておくと後々ラクできるかも?