Makefileについて

更新日 2008-10-13 (月) 15:11:49

動的マクロ定義

コンパイル条件によりパラメータを変更する

hello2.c

#include <stdio.h>
#ifndef WORLD
#    define WORLD "World"
#endif
int main(){
  printf("Hello "WORLD"! \n");
  return 0;
} 
$ gcc -o hello hello2.c
$ ./hello
Hello World!
$ gcc -o hello -DWORLD='"JE2ISM"' hello2.c
$ ./hello
Hello JE2ISM!

オブジェクトを作成してからリンカーで実行形式作製

hello.c

#include <stdio.h>
#ifndef WORLD
#    define WORLD "World"
#endif
int hello(){
  return printf("Hello "WORLD"! \n");
}

main.c

int hello();
int main(){
  hello();
  return 0;
}

変数を使用

gccの代わりにc++を引数で指定

Makefile

# コメントをあらわす。慣例で一番最初はallを指定する
# Makefileの書式は
# ターゲット : 依存関係
# (TAB) コマンド

CC = gcc

all: hello

# helloを生成時にmain.o とhello.oが必要。
hello: main.o hello.o
        $(CC) -o hello main.o hello.o

# main.oを生成時にmain.cが必要
main.o: main.c
        $(CC) -c main.c -o main.c -o main.o

# hello.oを生成時にmain.cが必要
hello.o: hello.c
        $(CC) -c hello.c -o hello.c -o hello.o -DWORLD='"JE2ISM"'

#生成ファイルの削除
clean:
        rm *.o hello
$ make CC=g++
g++ -c main.c -o main.c -o main.o
g++ -c hello.c -o hello.c -o hello.o -DWORLD='"JE2ISM"'
g++ -o hello main.o hello.o

サフィックスルール

同じような処理内容で主ファイル名が異なる場合などに利用する
$< が 依存ファイル を $@ が ターゲットをあらわす。

Makefile

# コメントをあらわす。慣例で一番最初はallを指定する
# Makefileの書式は
# ターゲット : 依存関係
# (TAB) コマンド

CC = gcc

all: hello

# helloを生成時にmain.o とhello.oが必要。
hello: main.o hello.o
        $(CC) -o hello main.o hello.o

#生成ファイルの削除
clean:
        rm *.o hello *.c~

# サフィックスルールで指定する特別ルール

.SUFFIXES: .c .o

# $< => 依存ファイル $@ => ターゲット
.c.o:
        $(CC) -c $< -o $@

参考

SoftwareDesign 2008/10 P67


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-10-13 (月) 15:11:49 (3508d)