nDiki : GNU Make
GNU Make
GNU 版 make ユーティリティ。
GNU Coding Standards で求められているターゲット
GNU Coding Standards 7.2.5 Standard Targets for Users より
- all
- install
- install-html
- install-dvi
- install-pdf
- install-ps
- uninstall
- install-strip
- clean
- distclean
- mostlyclean
- maintainer-clean
- TAGS
- info
- dvi
- html
- ps
- dist
- check
- installcheck
- installdirs
Win32 で標準的なコマンドがない時の代替
Perl が使えることを前提とすれば ExtUtils::Command を使うことで、UNIX / Windows どちらでも動くコマンドを定義できる。
RM_RF = perl -MExtUtils::Command -e rm_rf CP = perl -MExtUtils::Command -e cp MKPATH = perl -MExtUtils::Command -e mkpath
スポンサード リンク
Related term
2004年7月23日 (金)
■ プロジェクト関連ドキュメントを TeX で

現在進行中のプロジェクトの一つがそろそろ大詰め。 ドキュメント書きに突入。 前回までは過去の方法を踏襲して MS Word ベースだったのだが、自分がマネージャになった今期からは全面的に TeX ベースへ移行させる。
- Subversion で管理
- プロジェクト用 texmf は外部定義 (svn:externals)を使用して共有
- Linux、Windows のどちらでもビルドできるように
を用意。 Makefile は時間がなかったので GNUmakefile と Makefile を作って Linux 用と Windows 用の両方作ったのだが、後々面倒なので一本化したい。
- pLaTeX + hyperref + dvipdfmx で PDFにしおりを (2005-04-15)
- ActivePerl で Ming (2005-02-23)
- Debian GNU/Linux で Dropbox (2008-09-16)
- Rekisa で TortoiseSVN から日本語ファイルの差分表示 (2006-03-23)
- 日本語ファイル名どんとこい (2005-03-07)
2004年7月24日 (土)
■ Windows 用 GNU Make

Windows だと nmake がやっぱり主流だろうか。 しかし GNU Make とは違う点が多く、使い分けるのも面倒。 かといって Ant というのも面倒。
ということで気軽に使える Windows 用の GNU Make を探す。 Cygwin 版は共同作業者に入れてもらうのが面倒なので却下(Makefile から呼ばれるコマンド群もLinuxと同様のものが入るのでこちらの方が便利といえば便利ではあるのだが)。
MinGW版が 3.80 をポーティングしているし単体でも動きそうなのでこれを試してみることにする。
mingw32-make-3.80.0-3.exe を取ってきて実行。make そのものだと思っていたがマニュアル等を含むインストーラだった。 一旦インストールして、mingw32-make.exe をコピーしてアンインストール。 mingw32-make.exe 単体で動作するので取り扱いが楽でよい(必要なら make.exe にでもリネーム)。
Windows 特有の問題があるかどうかは今後使ってみてチェックだな。
- ActivePerl で Ming (2005-02-23)
- X-Deep/32 Xサーバ (2005-03-30)
- Module::Build でソースパッケージング (2005-08-24)
- OpenSSH for Windows (2004-08-05)
- TrueCrypt で USB メモリに Windows と Linux ... (2006-12-14)
2004年8月5日 (木)
■ Windows 用 GNU tar

この間 Windows 用の GNU Make として MinGW版を選択して、プロジェクトのドキュメントのビルドの自動化をすすめている。
しかし(最初からわかっていたのだが)make だけでは駄目で各ユーティリティがなくて結構不便。 touch すら無いし。 幸い全員の環境に ActivePerl が入っていることが前提になっているので、必要ならスクリプトを書いていけばある程度はなんとかなる。
今日は、プロジェクトで開発したPerl モジュールのソースアーカイブを自動的に一時ディレクトリに展開して pod2latex をかけてごにょごにょという処理の Makefile を書く。 さすがに tar が無いと無理だ (Archive::Tar を使うという手もなくはないが結局標準ではないし)。
@ GnuWin32
ということでGNU tarを探す。例によってインストール不要という条件で。
MinGW の中からは探せず。 GnuWin32 のものを使ってみる。 ついでに gzip も
- tar.exe (GNU tar tar-1.13-1-bin.zip)
- libiconv-2.dll (libiconv-1.8-1-bin.zip)
- libintl-2.dll (libintl-0.11.5-2-bin.zip)
- gzip.exe (gzip-1.3.5-bin.zip)
fork できないとかで tar の -z オプションが使えない。かなりがっかり。
@ texinst753 (W32TeX Web2C-7.5.3 簡易インストーラ)
あれ、gzip が最初からPATH上にあるなと思ったら、texinst753 に含まれていた奴。 GNU tar も入っている。 ちょっとバージョンが古めだけど -z も効くし、これが扱いやすいかも。
なにより他のプロジェクトメンバの Windows BOX にもそれぞれ入っているはずだし。
ということで GNU tar 確保。
- ActivePerl で Ming (2005-02-23)
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- USB メモリに Perl を入れて持ち歩きたい (2006-12-17)
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
- Template Toolkit (2004-09-08)
2005年4月20日 (水)
■ SCons は GNU Autotools のかわりになるか

NSIS のサイトによるとビルドに「SCons」を使うようしたらしい。
と興味深いツールになっているようだ。
現在プロジェクトLaTeXベースのドキュメント生成には GNU Make を使っているのだが、UNIX、Windows の両方でビルドできるようにするには ComSpec 環境変数の有無で使用するコマンドを切り換えたり等いろいろ面倒なので、代替ツールとして使えないかなと。
基本的な機能は Make に対する改良がなされているようであるし、コピー等ファイル操作も SCons 自体がもっているのでクロスプラットフォームでビルドできるようにするのも楽そうだ。
一方 Autoconf 系の機能については、インストール済みのライブラリの検出や実装レベルのチェック等を実装しているようである。 make check や make dist、make install 等にあたるターゲットに関する機能(あるいは規約)のようなものは無い。これは非常に残念。 結局自分が Ant を使わなくなったのも GNU Autotools にあるこれらの機能に欠けているからであるし。
実は私がPerl が好きな理由の一つとして、これらサポートが充実しているという点がある。Perl では ExtUtils::MakeMaker (あるいは Module::Build)があり、ビルドからテスト、ソースパッケージのパッケージングまでフレームワークが整っている。
SCons は Python ベースで、Makefile にあたるファイルも Python スクリプトである。 SCons が影響を受けた Cons は Perl ベースであったのだが、既に2001年5月ごろから開発が止まってしまっている。残念。
ということで Make の代替には使えそうであるが、GNU Autotools と同じようなことをするにはいろいろ手をかけないといけないといった印象。
- Module::Build でソースパッケージング (2005-08-24)
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- NSIS 2.22 は Linux でビルドできず (2006-12-20)
- ActivePerl で Ming (2005-02-23)
- nmake で毎回 pl2bat されるのを何とかしたい (2004-11-25)
2005年4月29日 (金)
■ SCons 微妙

SCons で pLaTeX2e ソースファイルを PDF に変換する SConstruct ファイルを書いてみた。
bb_builder = Builder(action = 'ebb $SOURCE',
suffix = '.bb', src_suffix = '.png')
pdf_builder = Builder(action = 'dvipdfmx -V 4 $SOURCE',
suffix = 'pdf', src_suffix = '.dvi')
env = Environment(LATEX = 'platex')
env.Append(BUILDERS = {'BBBuilder' : bb_builder})
env.Append(BUILDERS = {'PDFBuilder' : pdf_builder})
env.PDFBuilder(target = 'example-doc')
env.DVI(target = 'example-doc', source = 'example-doc.tex')
env.Clean('example-doc.dvi',
['example-doc.log', 'example-doc.out',
'example-doc.toc', 'example-doc.aux'])
env.Depends('example-doc.dvi', 'image1.bb')
env.Depends('example-doc.dvi', 'image2.bb')
env.Depends('example-doc.dvi', 'image3.bb')
env.BBBuilder('image1')
env.BBBuilder('image2')
env.BBBuilder('image3')
- 組み込みの PDF builder が今いち挙動がよくわからないので Builder を作成
- .bb ファイル用の Builder を作成
- latex ではなく platex を使うように
.tex から .dvi の生成ルールでは、補助ファイルを見て適宜数回 platex を実行してくれる。ここら辺はさすが。
GNU Make のような暗黙のルールの適用がない(わからない)ので、.bb ファイルを dvi の依存ファイルに指定するだけでは駄目で、ビルド指定をする必要があるのがちょっと面倒。
これだけだと GNU Make より便利とはいえないな。 プラットフォームによって異なるコマンド(cp / copy など)を使うような事や、もうちょっと複雑な事などをしないとそれほどメリットがでないか。
- SCons は GNU Autotools のかわりになるか (2005-04-20)
- 今日のさえずり - 新幹線の静岡駅と浜松駅が酷似している (2008-06-18)
- プロジェクト関連ドキュメントを TeX で (2004-07-23)
- pLaTeX + hyperref + dvipdfmx で PDFにしおりを (2005-04-15)
- Windows 用 GNU tar (2004-08-05)
2005年8月24日 (水)
■ Module::Build でソースパッケージング

@ ExtUtils::MakeMaker
私が Perl が好きな理由の一つに、標準でExtUtils::MakeMakerという Makefile ジェネレータがついているところである。これを使って Makefile.PL を書くと
perl Makefile.PL make manifest make make test make dist
で <pacakge>-<versionno>.tar.gz というソースパッケージを作ることができ、
tar zxvf <pacakge>-<versionno>.tar.gz cd <pacakge>-<versionno> perl Makefile.PL make make test make install
という手順でインストールする事ができるようになる。 パッケージの作り方が確立されているので、容易に新しいパッケージを開発しはじめられる。
逆に Java でプログラムを書くのが億劫なのは、このあたりの準備が面倒だからである。 Ant を使っても結局ここら辺自分でやらなければならないし。
@ ちょっとしたアーカイブの作成
ちょっとしたパッケージを作りたいと思うことは良くある。 例えばいくつかのデータファイルと、READMEファイルなんかをひとまとめにしてアーカイブにするとか。
本当にちょっとしたであれば、手動でアーカイブすれば良いのだが、
- アーカイブしたいファイル群がバージョン管理下にあって、CVS ディレクトリや .svn ディレクトリがある (除外してアーカイブする必要がある)
- 同じディレクトリにある、作業用のファイルはアーカイブしたくない (除外してアーカイブする必要がある)
- アーカイブする前に、チェック用のリグレッションテスト一式を走らせたい (リグレッションテストをかけられるようにする)
- UNIX でも Windows でもアーカイブ化できるようにしたい。
あたりを考慮しなければならない時は面倒くさくなってくる。
自動化としては
- シェルスクリプト/バッチファイルを書く
- Makefile を書く
- GNU Autotools を使う
あたりがぱっと思い浮かぶ。 しかし、最初の2つは毎回同じようなものを書くのが面倒だし保守もしにくい。 GNU Autotools はちょっとごっつすぎだし、Windows での環境構築も面倒。
@ ExtUtils::MakeMaker の欠点
ということで最初は ExtUtils::MakeMaker を使うという線で考えてみた。 もともと Perl モジュール用で汎用用途にはちょっと邪魔な振舞いもあるが、使えないことはないと思う。 しかし make (GNU Make あるいは nmake など) に依存しているという欠点がある。
@ Module::Build で
ということで ExtUtils::MakeMaker の代替である Module::Build ベースで汎用用途に使えないか検討してみた。こちらは pure Perl で make を必要としない。
Module::Build も Perl モジュールビルドにあわせた振舞いがあるものの、ちょっとカスタマイズすれば使えそうだ。 で、いろいろいじった結果、次のような感じにすると使いやすそうだ。
use Module::Build;
my $class = Module::Build
->subclass(class => 'NonmoduleBuilder',
code => q{
# Don't make blib
sub ACTION_code {};
# Don't make blib
sub ACTION_docs {};
# Don't make META.yml
sub ACTION_distmeta {
# no warning on ACTION_distdir
$_[0]->{metafile} = 'MANIFEST';
};
# Don't add MEATA.yml to MANIFEST
sub ACTION_manifest {
$_[0]->{metafile} = 'MANIFEST',
$_[0]->SUPER::ACTION_manifest(@_);
};
});
# Set your archive name and version.
$class->new(dist_name => 'mypackage',
dist_version => '1.0.2',
)->create_build_script;
カスタマイズした部分は以下(Module::Build 0.26 で動作確認)。
- Perl モジュールビルドに特有の blib ディレクトリを作らないようにする。
- META.yml を生成しないようにし、アーカイブに含まれないようにする。
上記のようなファイルを Build.PL という名前で作っておけば
perl Build.PL ./Build manifest ./Build ./Build test ./Build dist
等として、アーカイブ作成が容易にできるようになる。
しばらくこの方法でいろいろ試してみることにしてみよう。
- SCons は GNU Autotools のかわりになるか (2005-04-20)
- ActivePerl で Ming (2005-02-23)
- nmake で毎回 pl2bat されるのを何とかしたい (2004-11-25)
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
2007年10月18日 (木)
■ 今日のさえずり - 最近 CM で「しりあがり寿」の名を見る。うちでは画伯扱い(ほぼ日手帳の影響)。

- 10:17 プロジェクトのスケジュール共有用に Google カレンダー上に、1つカレンダーを新規作成。 *Tw*
- 10:50 GNU Make (Win32) では変数を設定しても、そのままではコマンド実行時の環境変数には入らないことを思い出した。 *Tw*
- 11:57 最近 CM で「しりあがり寿」の名を見る。うちでは画伯扱い(ほぼ日手帳の影響)。 *Tw*
- 12:32 着もと化した。 *Tw*
- SCons は GNU Autotools のかわりになるか (2005-04-20)
- WiKicker の Win32 対応 (2005-04-04)
- ほぼ日手帳をやめてミニ6穴見開き1週間ダイアリーに (2008-01-21)
- 来年のほぼ日手帳はナイロン・マンゴー2008 (2007-11-12)
- ほぼ日手帳復帰 (2008-07-22)
スポンサード リンク
■よく検索されるキーワード
torrent(58) 提案書(54) perl(42) 使い方(39) linux(34) 書き方(29) x31(28) windows(28) usb(24) 動画(22) thinkpad(21) debian(20) mp980(19) 画像(19) 壁紙(19) svn(16) サンプル(16) 作り方(16) c#(15) リフィル(14) ヨドバシ(14) 手帳(13) アジェンダとは(13) 設定(13) cvs(12) ほぼ日手帳(12) ssh(11) 感想(11) ほぼ日(11) アジェンダ(11) java(11) バッグインバッグ(10) ドラマ(10) make(10) マキノ(10) メモリ(10) tc-1(10) 加湿器(10) nikon(10) af(9) ボールペン(9) ノート(9) インストール(9) gmail(9) ハクキンカイロ(9) a6(9) gimp(9) truecrypt(9) フィルムスキャン(9) ganttproject(9) 評判(9) 充電式カイロ(9) カメラ(9) アジェンダの書き方(9) dropbox(9) 修理(9) デロンギ(8) ファイル(8) 秋葉原(8) grub(8) 変換(8) proxy(8) subversion(8) 無料(8) 口コミ(8) wiki(8) ht-01a(8) ubuntu(8) 2008(8) porter(8) 無印(7) a6ノート(7) ご査収(7) ヨドバシカメラ(7) thinkingrock(7) centos(7) the(7) gtd(7) システム手帳(7) 映画(7)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザイン ビックカメラProcess Time: 0.098966s / load averages: 0.09, 0.16, 0.19
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



スポンサード リンク