Memo/Linux/Makefile

http://dexlab.net/pukiwiki/index.php?Memo/Linux/Makefile
 

Makefile


ループ処理

  • Makefile
    1. NUM := $$(seq -w 01 03)
    2.  
    3. test:
    4.         @for i in $(NUM); do \
    5.                 echo $$i; \
    6.         done
  • 実行
    1. make test
    2. 01
    3. 02
    4. 03

エラーを無視して実行

  • コマンド内エラー
    • 通常、終了コードが0以外の場合、中断する
    • 行頭"-": エラーを無視して実行する
    • 行頭"@": コマンド行をechoしない

強制実行

  • 「make -B」とする
  • 何もしないターゲットを用意する
    1. backup: FORCE
    2.         mkdir -p backup/arkmanager
    3.         cp -f /etc/arkmanager/arkmanager.cfg backup/arkmanager/
    4.  
    5. FORCE:

ファイルチェック等

  • GNU makeの場合、1行毎に sh -c 'コマンド' のように実行されるので、複数行の場合は行末にバックスラッシュを入れる必要がある
  • Makefile
    1. test:
    2. @if [ ! -f "/tmp/test.log" ]; then \
    3. rm /tmp/test.log; \
    4. fi

シェルの変更

  • Makefile
    1. SHELL := /bin/bash

OSでの条件分岐

  • OS毎にMakefileを分ける
  • Makefile
    ifeq ($(OS),Windows_NT)
    	include Makefile.win
    else
    	include Makefile.$(firstword $(subst _, ,$(shell uname -s)))
    endif
  • Makefile.Linux
    all:
    	@echo "Linux"
  • Makefile.Darwin
    all:
    	@echo "Mac OS X"

シェルの実行

  • `date`
  • $(date)はダメ。代わりに$(shell date)が使える
  • ホスト名の取得: HOST=$(shell hostname)

暗号化zipファイルを作る

  • パスワードを入力する場合
    • Makefile
      1. zip:
      2. cd ../;zip -qr9 -e foo-$(shell date +%Y%m%d).zip ./foo/
    • 固定パスワードの場合「-e」の代わりに「-P password」

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-03-31 (金) 12:49:44 (508d)