makeが通らない
ちょっとした実験をする Main.cというソースがあったとしよう。たとえば次のようなもの。#include
int main() {
printf("Hello, world.\n");
return 0;
}
これだけなら、わざわざ makefile(や build.xml, pom.xml)を作らなくとも、
$ make Main
cc Main.c -o Main
の様にビルドが通る。これはデフォルトで定義されているサフィックスルールだけで何とかなる場合だからだ。
しかし、Ubuntu 12.04にしたところ、
$ make Main
make: *** ターゲット 'Main' を make するルールがありません. 中止.
と表示されてしまう。
makeコマンドで補完ができない
まだ可笑しい所がある。シェルでmake Mのあと、Tabキーを押しても補完されない。
make Main.cが出ることを期待していたのだが。
使っているシェルが悪いのかと psしてみたが、bashである。
試しに echoとか、lsとか、catとかのあとに Mに続けて Tabキーを押すとちゃんと補完される。
Tabキーの接触不良でもないようだ。
また誰か余計な機能を発明したようだ。
理由は bash-completion
ネットで調べてみると出てきたのは bash-completionという機能。makeや gitなど、使用するコマンドによって補完の推測方法を変えているようだ。
makeでは、makefileのターゲットを調べ、あるものしか入力できない。
makefile無しの場合のターゲットの推測までは頭が回ってないようだ。
中途半端なヤツ。
bas-completionが有効になってるかどうかは、次のように complete -pを実行して completeルールがゾロゾロと出てくるかどうかで確かめることができる。
$ complete -p
:
:
complete -F _route route
complete -o default -o dirnames -F _mount mount
complete -F _badblocks badblocks
complete -F _filedir_xspec lyx
complete -F _filedir_xspec rgvim
complete -F _filedir_xspec timidity
complete -F _filedir_xspec dvitype
complete -F _filedir_xspec dviselect
complete -F _filedir_xspec xdvi
complete -o default -F _longopt uniq
complete -F _root_command sudo
complete -F _command tsocks
complete -a unalias
bash-completionを無効にする
この機能を無効にするには、sudo apt-get remove bash-completion
とやってアンインストールすれば良いのだが、それだと他のユーザまで影響してしまうので、つぎのようにしてローカルにアンインストールすれば良い。
$ complete -r
アンインストールがうまく行っていれば、
$ complete -p
でなにも出てこない。
bash-completionを無効にすると、makefileにないターゲットや makefile自体が無い状態での補完ができるようになる。
なお、makeでは無効にしたいが、gitでは有効にしておきたいということもできるようだ。
先輩、暮らす図って何ですか?