ソフトウェアとハードウェアの境界

ホビー開発に関する誰得情報満載☆

windowsでUnixライク環境

Windowsのシステム環境変数PATH

windowsで開発していると、いろんなツールを使う事になると思う。
IDE一本の人はいいのだが、僕はコンパイラコンパイラ(他ツールを通して)、エディタはエディタ(つーかvim)、シェルはシェルと、多数のウィンドウを移動する(あくまでもハッカーっぽい感じを演出したいが為)。 僕はUnix大好きなので、Unixライクな環境を提供してくれるツール群は欠かせない。僕は特にCygwinを多用している。
Cygwinをどの範囲まで使用するか、ということに関しては賛否両論あるだろうが、僕はもうどっぷり浸かっている状態と言っていい。ちなみに僕はzsherである。bashでもいいんだけど、ただただ補完機能がいい、ということだけでzshを使おうと決めた。笑
以前までは、DOS窓が軽量だったので、システム環境変数PATHにCygwinのbinとかを通して使用していたのだが、途中でカオスっていることに気づいた。
僕は、H8用のコンパイラや、他にもMinGWとかも使用していた(いや、とりあえずインストールしただけ)。そうなると、MinGWでシェルを使うと、どのgccやmakeを使っているかわからない、みたいな状態になった。
ということで、それぞれの環境できっちりとPATHを使い分けてみよう。

PATHの設定

以下の3つのツールのPATHを設定する。

  • Cygwin
    Cygwinに関しては、環境変数PATHの設定と共に、.zshenv、.zshrcも掲載しておきたい。また、fstabでWindowsC:/Users/{ユーザ}/ディレクトリをCygwinでの/home/{ユーザ}/ディレクトリとして設定する。加えて、Cygwin起動時、zshが起動するようにする。
  • MinGW(MSYS)
    bashなので、.bashrcでPATHを追加する。
  • gvim
    当たり前のことだが、.zshenvや.bashrcにPATHを通したからといって、gvimはその情報を知ることはできない。gvimgrepgcc、makeコマンドを使用できるのは、Windowsのシステム環境変数PATHにCygwinのbinなど通っているからだ。システム環境変数PATHに設定しないのであれば、そのままではgvimgrepやmakeができない。この場合、gvimは.vimrcでPATHを通すようにする。

CygwinのPATH設定

インストールやツール群のインストールは他の記事に譲る。
僕は、以前はかなりCygwinを敬遠していた。何が嫌だったのかというと、Cygwinの起動が異様に遅いこと。
これは、 nukino.github.io
こちらの記事が非常にわかりやすく書いてらっしゃる。
結論としては、bash_completionを使用しなければ起動は多少早くなる。
僕は余計なプロファイルの読み込みを避けるため、Cygwin起動ショートカットのプロパティを開き、[リンク先]の末尾についてある「-」をDelした。
zsherにbash_completionなど無用の長物だ。
余談はさておき、Cygwinの設定を。

[Cygwin]/etc/passwd
#自分のユーザ名を探して、末尾のbashをzshに変更
ユーザ名:*:??????:??????:U-MacWin\ユーザ名,S-1-5-21-??????????-??????????-??????????-1001:/home/ユーザ名:/bin/zsh

上記で、Cygwinの起動シェルがzshに設定される。

[Cygwin]/etc/fstab
#もともとある/cygdriveの設定をコメントアウト
#none /cygdrive cygdrive binary,posix=0,user 0 0
c:/ /c/ /cygdrive/c/ binary,posix=0,user 0 0
C:/Users/ /home/ ntfs  override,binary,auto 0 0
C:/Users/ユーザ名 /home/ユーザ名 ntfs  override,binary,auto 0 0

上記の設定で、/cygdrive/c/...としてCドライブ以下のパスを指定していたのが、/c/として指定できる。
また、C:/Users/homeに対応し、C:/Users/ユーザ名/home/ユーザ名、つまりWindowsのユーザのホームディレクトリに対応する。
こうすると、どうしてもホームディレクトリにUnix系OSのように、いろんな設定ファイルが出来上がってしまうので、嫌な人は設定しないでおこう。
この設定をすると、.bashrcや、.zshenv、.zshrcはホームディレクトリに配置することになる。

[Cygwin]~/.zshenv
#重複パス除去設定
typeset -U path
#この書き方はcsh系らしいです。
#shなら、export $path=foobar:$path
path=(
   /usr/*/bin/(N-/)
   /bin/(N-/)
   /usr/local/*/bin(N-/)
   /var/*/bin(N-/)
   /usr/sbin(N-/)
   $HOME/bin(N-/)
   $HOME/Work/cmd(N-/)
   $HOME/Work/cmd/h8300-elf/h8300-elf/bin(N-/)
   $HOME/Work/cmd/rpi-gcc/bin(N-/)
   $path
)
[Cygwin]~/.zshrc
#ヒストリの設定
HISTSIZE=20000
HISTFILE=~/.zhistory
SAVEHIST=20000
#プロンプトの設定
PROMPT='tmain %% '
RPROMPT='{`cygpath -m \`pwd\``}'

#なんの設定か忘れた
setopt auto_cd auto_remove_slash auto_name_dirs
setopt extended_history hist_ignore_dups hist_ignore_space prompt_subst
setopt extended_glob list_types no_beep always_last_prompt
setopt cdable_vars sh_word_split auto_param_keys pushd_ignore_dups
#setpot auto_menu correct rm_star_silent sun_keyboard_hack
#setopt share_history inc_append_history

#これもヒストリ系かなぁ??
h () {history $* | less}
mdcd () {mkdir -p "$@" && cd "$*[-1]"}
mdpu () {mkdir -p "$@" && pushd "$*[-1]"}

alias -s pdf=acroread dvi=xdvi
alias -s {odt,ods,odp,doc,xls,ppt}=soffice
alias -s {tgz,lzh,zip,arc}=file-roller

#viライクなキーボード操作が可能
bindkey -v

#これがzshのcompletionの設定
zstyle ':completion:*' format '%BCompleting %d%b'
zstyle ':completion:*' group-name ''
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
zstyle ':completion:*' menu select=1
autoload -U compinit && compinit

随分前に「zshの本」を買って、いろいろと設定したのだが、いい具合に忘れてる。笑

zshの本 (エッセンシャルソフトウェアガイドブック)

zshの本 (エッセンシャルソフトウェアガイドブック)


ご一読されたし。

MinGWのPATH設定

またもや余談だが、H8用のコンパイラは以下から入手できる。
KPIT GNU Tools
僕は、KPITのtoolchainのソースを、Windows上でコンパイルして作成してみよう、という試みに出た。
それはまさに地獄の始まりであった…(´;ω;`)
Cygwinでは、gccコンパイラ複数あって、i686-pc-cygwini686-pc-mingw32、i686-w64-mingw32、x86_64...などなどある。
とりあえずCygwin環境でH8用のコンパイラが使えればええわと思って、configureで特に--hostとか--buildとか設定せずコンパイルしていったのだが、なかなかできない。
gmp、mpfr、mpcなどのライブラリは用意したし、いろんな情報を参照しながらやったけど、結局ダメで、MinGWでも無理かなぁ??と思ってこっちでやったけど、やっぱり無理で気がつけば3週間ほど経っていたので、まさにteratailのウェブ広告のような状態だった。笑
https://s-media-cache-ak0.pinimg.com/736x/d3/01/a8/d301a87d37e512ecc42156f02a980f6a.jpg
きちっとWindows環境でtoolchainが作成できればブログ書こうと思ってたのに、予想を遥かに超えてうまくいかなかった。今はもう諦めてKPITのインストーラからインストールして使用させて頂いている…
.bashrcはサラッと終わらせよう。

[MSYS]~/.bashrc
PATH="${HOME}/bin:${PATH}"
PATH="/c/Users/ユーザ名/Work/cmd/MinGW/bin:${PATH}"
PATH="${HOME}/kpit/chain/bin:${PATH}"

上記のPATH="/c/foo/bar:${PATH}"ように設定すれば、PATHを追加できる。MinGWはあまり使用しないので、必要以上に設定を変更しないようにしている。

gvimのPATH設定

gvimにPATHを通すには、.vimrcに以下のような記述を追加する。

[gvim].vimrc
let $path=$path.';'.$HOME."\\Work\\cmd;"
let $path=$path.$HOME."\\Work\\cygwin\\bin;"
let $path=$path.$HOME."\\Work\\cmd\\h8300-elf\\h8300-elf\\bin;"
let $path=$path.$HOME."\\Work\\cmd\\rpi-gcc\\bin;"
let $path=$path.$HOME."\\Work\\gvim;"

つまり、let $path=でシステム環境変数PATHの設定が可能ということだ。
そう、もともとインストーラでインストールしたH8用のコンパイラに、なんの不満もなかったのだが、KOZOSのソースをgvim上でコンパイルして、エラー箇所に飛ぼうとして飛べない、ということがgccソースコンパイルをしようと思ったきっかけだった。
しかし原因は他にあり…
次回の記事にきっちり書かせてもらおう。
今回も誰得記事、しっかり書かせていただいた。