10分程で今書いたものなので使い勝手は分からない。
all: main.exe input_
./main.exe < input | tee out
main.exe: main.cc
g++ -o $@ -std=c++11 $^
input_:
xsel -bo | sed -e 's/^\s*//g' | sed -e 's/\s*$$//g' > input
test: main.exe
@for i in cases/*.in; do \
./main.exe < $$i > /tmp/out; \
cmp -s /tmp/out $${i%in}out; \
RETVAL=$$?; \
if [ $$RETVAL -eq 1 ]; then \
/bin/echo -e '\e[31m'$$i'\e[m'; \
diff /tmp/out $${i%in}out; \
exit 1; \
fi; \
done; \
/bin/echo -e '\e[34mpassed!\e[m'
clean:
-mkdir cases
-rm -f out *.exe cases/* /tmp/out
make
./input
とする./out
に tee するcases/xxx.in
と cases/xxx.out
を用意して make test
make clean
は、cases/ の中身を吹き飛ばす
シェルスクリプトをMakefileの中に書くのがすごい苦手で、 行頭に @
を置く方法と、 echo を絶対パスで指定するのを知った。 素でechoするとmakeの組み込みか何かが働く?かでオプションを理解してくれない。