Luzhiled's memo

メモということです

ライブラリを使う上でのあれこれ

それ

関連(?): GitHubを用いた自作ライブラリ管理 - ei1333の日記


清書する気が起きなかった ごめん

GitHubGitHub Pages 間の移動

GitHub から GitHub Pages への移動

競プロライブラリに自動で verify をしてくれる CI を簡単に設定できる Web ページ | verification-helper の下の6.が行われていないと存在しない場合がある やってくれ

GitHub Pages から GitHub への移動

画面の幅が狭いと最上部に追いやられる

bundle ボタン

依存しているライブラリを展開してくれる

例えば 円 (整数幾何) | comp-library だと

↑展開前

↑展開後 (circle が依存している point が依存している vector も展開されています)

主に適当に検索して出てきたものをその場しのぎで使う場合に使う

よく使う他人のライブラリとかは手元にあったほうがぐちゃぐちゃにならなくてきれいだと思う(後述)

ローカルでのコンパイル/展開

わざわざ展開してコピーして貼り付けて……みたいなことをしなくても適切な運用をすれば include するだけで済むようになります

path

リポジトリのルートディレクトリからそのファイルへのパス(を include しているtext)は GitHub Pages からコピーできます

以降では bundle して copy して paste する代わりにこれが貼られているものとしている

コンパイル

C++ の話をすると、-I で include ファイルを検索するディレクトリを追加することができます。ここにライブラリのローカルリポジトリのルートディレクトリへの絶対パスを書いておけば良いです。

それ以外の言語は知らん さすがに適切にやれば同じことができるだろうとは思う

oj-bundle

verification-helper には、ジャッジに提出するために実際にライブラリを展開する機能も提供されています: verification-helper/README.ja.md at master · online-judge-tools/verification-helper · GitHub

よけいな行の削除

bundle すると

#line 2 "src/geometry/Z2/class/circle.hpp"

みたいなものが大量に出てくるのですが、個人的には邪魔なので消して submit しています。

grep -v '^#line '

とかやると消えると思うので、これをやった上で別のファイルに吐くなどするとよさそうです。

#pragma once とか空行とかも邪魔なので、実際には

grep -v '^#line ' | \
grep -v '^#pragma once' | \
cat -s > .bundled.cpp

みたいなものを用意している。

提出

↑ みたいな感じで一時ファイルに bundle したあとに提出して一時ファイルを消すまでを行うコマンドも用意している。

参考: oj/getting-started.ja.md at master · online-judge-tools/oj · GitHub

oj s .bundled.cpp -y -w=0

とかやっているけど非推奨なんだよな でもせっかちなオタクなんだ

手元での verify 実行

おまけ編

開発するときにわざわざリポジトリのルートディレクトリに戻って oj-verify run やってまた戻って…………みたいなことをしていたんですが、

(cd $(git rev-parse --show-toplevel) && oj-verify all)

でよいことに気がついてきた

まあ submodule とかの中でやると多分こわれるけど