ステップ1:h/
%.o
変数を追加し、ルールに小さな変更を加え、vpath
ディレクティブを追加して、%.o
ルールがどこを見ればよいかを認識できるようにします。
INC_DIR = h
%.o: %.c
$(cc) -I$(INC_DIR) -c $<
vpath %.h $(INC_DIR)
ステップ2:src/
別の変数を追加し、 の割り当てを変更し、objs
別の を追加しvpath
ます。
SRC_DIR := src
objs:=$(patsubst $(SRC_DIR)/%.c,%.o,$(wildcard $(SRC_DIR)/*.c))
vpath %.c $(SRC_DIR)
ステップ 3:obj/
変数を追加し、ルールを変更しobjs
て、ルールを次のように変更します。%.o
clean
OBJ_DIR = obj
objs:=$(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(wildcard $(SRC_DIR)/*.c))
$(OBJ_DIR)/%.o: %.c
$(cc) -Ih -c $< -o $@
clean:
rm -f *.d $(OBJ_DIR)/*.o $(prog)
ステップ 4:bin/
別の変数を追加し、 の割り当てを変更しますprog
。
BIN_DIR := bin
prog:=$(BIN_DIR)/$(notdir $(PWD))
編集:
あなたが今求めているのは悪いデザインです。しかし、ここにあります:
オブジェクト/メイクファイル:
SRC_DIR := ../src
objs:=$(patsubst $(SRC_DIR)/%.c,%.o,$(wildcard $(SRC_DIR)/*.c))
cc:=gcc
.PHONY: ALL_OBJS
ALL_OBJS: $(objs)
INC_DIR := ../h
%.o: %.c
$(cc) -I$(INC_DIR) -c $<
vpath %.c $(SRC_DIR)
.PHONY: clean test
clean:
rm -f *.[od]
-include *.d
ビン/メイクファイル:
P:= $(PWD)
P:= $(dir $(P))
prog:= $(notdir $(P:/=))
OBJ_DIR := ../obj
objs:=$(notdir $(wildcard $(OBJ_DIR)/*.o))
cc:=gcc
ccflags:=-lcurses -lgdbm -lgdbm_compat
$(prog): $(objs)
$(cc) $(ccflags) -o $@ $^
vpath %.o $(OBJ_DIR)
.PHONY: clean test
clean:
rm -f *.d $(prog)
test: $(prog)
$(test)
-include *.d