1. ホーム
  2. メイクファイル

[解決済み】makefileに'cd'コマンドを記述するには?

2022-03-24 07:02:02

質問

例えば、私のmakefileには以下のようなものがあります。

all:
     cd some_directory

と入力したところ make のように 'cd some_directory' とだけ表示されました。 echo コマンドを実行します。

解決方法は?

実際にコマンドを実行し、ディレクトリを some_directory しかし、これはサブプロセスのシェルで実行され、make や作業中のシェルには影響しません。

の中でより多くの作業を行いたい場合、その作業は some_directory のように、セミコロンをつけて、他のコマンドを追加する必要があります。改行はルールの終わりと解釈されるため使用できないことに注意してください。

例えば

all:
        cd some_dir; echo "I'm in some_dir"; \
          gcc -Wall -o myTest myTest.c

また、バックスラッシュや改行を入れても、すべてのコマンドの間にセミコロンが必要であることにも注意してください。これは、シェルが文字列全体を1行として解析しているためです。コメントにあるように、コマンドの結合には「&&」を使うべきです。これは、直前のコマンドが成功した場合にのみ実行されることを意味します。

all:
        cd some_dir && echo "I'm in some_dir" && \
          gcc -Wall -o myTest myTest.c

これは、クリーンアップのような破壊的な作業をするときに特に重要なことで、そうしないと間違ったものを破壊してしまうからです。 cd が何らかの理由で失敗した場合。

しかし、よくある使い方は、サブディレクトリでmakeを呼び出すというもので、これは調べてみるといいかもしれません。このためのコマンドラインオプションがあります。 cd そのため、あなたのルールは次のようになります。

all:
        $(MAKE) -C some_dir all

に変更されます。 some_dir を実行し Makefile で、ターゲットは "all"です。ベストプラクティスとして $(MAKE) を呼び出すのではなく make を直接使用すると、正しい make インスタンスを呼び出すように注意します (たとえば、ビルド環境に特別な make バージョンを使用している場合など)。また、特定のスイッチ、たとえば -t .

ちなみに 常に は、出力がない場合でも、実行したコマンドを (明示的に抑制されていない限り) エコーします。