MENU
カタログクリップ
本ページはプロモーションを含みます。

makefileで、if文 / for文を使う、あるいは複数行のコマンドを書く方法

2020 6/28
広告
コンピューター
2017年12月4日2020年6月28日

makefileで、for文を使うなど、コマンドを複数行に分けて記述したいときがあります。その方法と注意点を紹介します。

makefile中で、そのまま複数行のコマンドを書くと、コマンドは行ごとにシェルに渡されてしまうので、エラーとなります。

目次

if文

そのため、次のように\を使って、改行を明示します。

if [ -d tmp ]; then\
  echo "tmp is a directory";\
fi

for文

for文を書く場合は同様に\を使い、次のようにします。

for i in 1 2 3; do\
  echo $$i;\
done

ここでの注意点は、変数を参照する場合には、$を2つ重ねるということです。$のままだと、makeに解釈されてしまいますので、それを防ぎます。

本当にfor文を使ったほうがよいか?

for文で複数ファイルを処理するmakefileを作成する前に考えたいのは、それは本当にmakefileを使用して行うべき処理かということです。

コンパイルにmakeを使う利点の一つは、以前のコンパイル以降に更新されていない依存ファイルは、コンパイルしなおさない、という点です。

for文で複数ファイルを処理する場合は、更新されているかどうかを気にせず処理してしまうことになり、この利点が失われてしまいます。

 

makefileではなく、ただのシェルファイルを書いた方がよい場合ではないか考えてみましょう。

 

makeのターゲットには、ワイルドカード*を使うことができます。

ワイルドカードを使用して実現できる処理の場合は、その方がよいでしょう。

 

ただ、ワイルドカードを使用しても、ディレクトリを再帰的に下っていくことはできませんので気をつけましょう。

依存関係が不特定という場合は少ないでしょうから、ディレクトリを列挙するという方法で対処できると思います。

 

stackoverflow の how to write loop in a makefileのページも参考になります。

 

以上、makefileでfor文を使う、あるいは複数行のコマンドを書く方法でした。

コンピューター
highlightjs

関連記事

  • Archer BE550とArcher BE450の7つの違い [TP-Link Wi-Fi 7ルーター]
    2025年8月30日
  • Archer BE7200とArcher BE450の3つの違い [TP-Link Wi-Fiルーター]
    2025年8月30日
  • Archer BE3600とArcher BE220の2つの違い [TP-Link Wi-Fiルーター]
    2025年8月30日
  • G-PKB-002LNdとG-PKB-002LNの2つの違い [Logicool G キーボード]
    2025年8月30日
  • KX700GRdとKX700GRの4つの違い [ロジクール ワイヤレスキーボード]
    2025年8月30日
  • G-PPD-004WL-BKd と G-PPD-004WL-BKの2つの違い [Logicool ゲーミングマウス]
    2025年8月30日
  • SSD-CK1.0N4PLG3NとSSD-CK1.0N4PLG3Jの1つの違い [KIOXIA 内蔵SSD]
    2025年8月30日
  • KX700GRdとKX700GRの2つの違い [ロジクール キーボード]
    2025年8月30日
カテゴリー
  • コンピューター
    • gnuplot & eps
    • mac
    • matplotlib
    • wordpress
  • ホーム・家電
    • アイロン
    • オーディオ
    • オーラルケア
      • ジェットウォッシャー
      • 音波振動歯ブラシ
    • カメラ
    • カー用品
    • キッチン
      • 冷蔵庫
      • 浄水器
      • 炊飯器
      • 調理器具
      • 電子レンジ
    • クリーナー
    • テレビ、レコーダー
    • ドアホン
    • ルンバ
    • 一覧比較
    • 工具
    • 温水洗浄便座
    • 空気清浄機・加除湿機
    • 空調・季節家電
    • 美容家電
      • フェイスケア
      • ヘアケア
      • ボディーケア
      • メンズ美容家電
        • ラムダッシュ
    • 血圧計
  • 健康
  • 家事
    • パン
    • 料理
    • 育児
    • 食品
      • おせち
      • コーヒー
  • 書籍
  • 知識
  • 趣味
    • ペン字
    • ロードバイク・クロスバイク
    • 車
    • 鉄道模型
    • 電子工作
サイト内検索
最近の投稿
  • LC551JBKとLC501JGYの1つの違い [Shark コードレススティッククリーナー]
  • LC400JWH とLC200JIV の2つの違い [Shark コードレススティッククリーナー]
  • LC250JBRとLC200JIVの2つの違い [Shark コードレススティッククリーナー]
  • SV18 FF OR2とSV18 FF ENT2の2つの違い [Dyson コードレス掃除機]
  • DysonのSV18 FF EX2とSV18 FF Hの2つの違い [Dyson 掃除機]
  • Digital Slim Fluffy (SV18 FF H)とOrigin (SV18 FF OR2) の3つの違い [ダイソン 掃除機]
  1. ホーム
  2. コンピューター
  3. makefileで、if文 / for文を使う、あるいは複数行のコマンドを書く方法
  • ホーム
  • プライバシーポリシー

© カタログクリップ
contact@beiznotes.org

目次