4

主に娯楽として、 というディレクトリに を作成しmakefile、それを実行可能にしました。ファイルの最初の行は次のようになりました。$HOME/binrebuild.mk

#!/bin/make -f
#
# Comments on what the makefile is for

...

all: ${SCRIPTS} ${LINKS} ...

...

次のように入力できます。

rebuild.mk

これによりmake実行されます。

これ以外に、これを永続的に悪用しない理由は何ですか:

  • makefile は 1 つのディレクトリに関連付けられているため、メイン ディレクトリには適切ではありませんbin

これまでに悪用されたトリックを見た人はいますか?


いくつかのコメントを収集し、もう少し背景情報を提供します。

  1. Norman Ramsey は、この手法が Debian で使用されていると報告しています。それは興味深いことです。ありがとうございました。
  2. 「make」と入力する方が慣用的であることに同意します。
  3. ただし、シナリオ (以前は言及されていません) は、私の $HOME/bin ディレクトリに、ディレクトリ内の 500 以上のコマンドの主要なメンテナンス ツールであるクロスプラットフォームのメインの makefile が既に含まれているというものです。
  4. ただし、ある特定のマシン (のみ) で、特別なツール セットを構築するためのメイクファイルを追加したいと考えました。したがって、これらのツールは、rebuild.mkこの質問のために呼び出した特別なメイクファイルを取得します (私のマシンでは別の名前が付けられています)。
  5. make -f rebuild.mk代わりに「 」を使用することで、「 」と入力する手間を省くことができますrebuild.mk
  6. ユーティリティの位置を修正することは、makeプラットフォーム間で問題があります。
  7. この#!/usr/bin/env make -f手法は機能する可能性がありますが、公式の交戦規則では、行は 32 文字未満で、コマンドの引数は 1 つしか指定できないと考えられます。
  8. @dF は、この手法では作成する引数を渡すことができない可能性があるとコメントしています。いずれにせよ、それは私の Solaris マシンでは問題になりません。私がテストした 3 つの異なるバージョンの「make」(Sun、GNU、私のもの) はすべて、オプション (私の自作バージョンでは「-u」) とターゲット「someprogram」およびマクロ CC を含む、私が入力する追加のコマンド ライン引数を取得しました。 ='cc' WFLAGS=-v (別のコンパイラを使用し、Sun コンパイラが認識しない GCC 警告フラグをキャンセルするため)。

これを一般的な手法として推奨するつもりはありません。

述べたように、それは主に私の娯楽のためでした。この特定の仕事のためにそれを保持するかもしれません。分散作業で使用する可能性はほとんどありません。もしそうなら、私は ' fixin' スクリプトを提供して適用し、インタープリターのパス名を修正します。実際、私はすでに自分のマシンでそれを行っていました。そのスクリプトは、Camel ブック (Larry Wall による「Programming Perl」) の初版の遺物です。

4

7 に答える 7

5

一般に配布可能な Makefile のこれに関する 1 つの問題は、makeプラットフォーム間での場所が常に一貫しているとは限らないことです。また、一部のシステムでは、 のような代替名が必要になる場合がありますgmake

もちろん、いつでも適切なコマンドを手動で実行できますが、この種のことは、Makefile を実行可能にするという目的全体を無効にします。

于 2008-12-22T04:19:57.050 に答える
5

すべての Debian パッケージの一部であるファイルで、このトリックが以前に使用されているのを見たことがあります。debian/rules

于 2008-12-22T04:36:25.753 に答える
3

常に同じ場所にあるとは限らないという問題に対処するにはmake(たとえば、私のシステムでは/usr/binにあります)、次を使用できます

#!/usr/bin/env make -f

UNIX ライクなシステムを使用している場合。

もう 1 つの問題は、このように Makefile を使用すると、たとえばmake CFLAGS=....

于 2008-12-22T04:26:55.337 に答える
2

「make」は「./Makefile」より短いので、何も買わないと思います。

于 2008-12-22T04:24:04.607 に答える
0

これにもシェルエイリアスを使用できます。

于 2008-12-22T11:13:42.237 に答える
0

これを別の方法で見ることができます: インタプリタが固定ファイル名を与えない場合に固定ファイル名を探すような言語を設計するのは良い考えですか? スクリプト名がない場合にpython検索するとどうなりますか? Pythonfile;)

既知の名前に基づく規則を作成するために、このようなメカニズムは必要ありません。例: Autoconf の./configureスクリプト。

于 2012-03-15T05:48:36.043 に答える
0

私がこれをしない理由は、"make" と入力する方が Makefile ベースのプロジェクトを構築するのにより慣用的だからです。「make && make install」と入力するだけでなく、作成したプロジェクトごとに、誰かが作成した別の名前の makefile を検索する必要があると想像してみてください。

于 2008-12-22T04:22:10.353 に答える