Memo/Linux/Makefile

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

Makefile


コメント

  • 行頭に'#'
  • インデントを付けると#を含めてそのまま表示される

ループ処理

  • Makefile
    NUM := $$(seq -w 01 03)
    
    test:
            @for i in $(NUM); do \
                    echo $$i; \
            done
  • 実行
    make test
    01
    02
    03

エラーを無視して実行

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

強制実行

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

ファイルチェック等

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

シェルの変更

  • Makefile
    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
      zip:
      	cd ../;zip -qr9 -e foo-$(shell date +%Y%m%d).zip ./foo/
    • 固定パスワードの場合「-e」の代わりに「-P password」

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-18 (火) 15:23:00 (31d)