DIR_INC = ./include
DIR_SRC = ./src
DIR_OBJ = ./obj
DIR_BIN = ./bin
SRC = $(wildcard $(DIR_SRC)/*.c)
DIR = $(notdir $(SRC))
OBJ = $(patsubst %.c,$(DIR_OBJ)/%.o,$(notdir $(SRC)))
TARGET = main
BIN_TARGET = $(DIR_BIN)/$(TARGET)
OPPTION = -g -Wall -I$(DIR_INC)
$(BIN_TARGET):$(OBJ)
gcc $(OBJ) -o $@
$(DIR_OBJ)/%.o:$(DIR_SRC)/%.c
gcc -c $< -o $@ $(OPPTION)
ALL:
@echo $(SRC)
@echo $(DIR)
@echo $(OBJ)
.PHONY:clean
clean:
find ${DIR_OBJ} -name *.o -exec rm -rvf '{}' \;
clear:
find ${DIR_OBJ} -name *.o | xargs rm -rvf
DIR_INC = ./include
DIR_SRC = ./src
DIR_SRC_LUA = ./src/lua
DIR_OBJ = ./obj
DIR_BIN = ./bin
SRC1 = $(shell ls $(DIR_SRC)/*.c)
SRC = $(wildcard $(DIR_SRC)/*.c) $(wildcard $(DIR_SRC_LUA)/*.c)
DIR = $(notdir $(SRC))
OBJ = $(patsubst %.c,$(DIR_OBJ)/%.o,$(notdir $(SRC)))
TARGET = main
BIN_TARGET = $(DIR_BIN)/$(TARGET)
OPPTION = -g -Wall -I$(DIR_INC)
$(BIN_TARGET):$(OBJ)
gcc $(OBJ) -o $@
$(DIR_OBJ)/%.o:$(DIR_SRC)/%.c
gcc -c $< -o $@ $(OPPTION)
$(DIR_OBJ)/%.o:$(DIR_SRC_LUA)/%.c
gcc -c $< -o $@ $(OPPTION)
ALL:
@echo $(SRC)
@echo $(DIR)
@echo $(OBJ)
.PHONY:clean
clean:
find ${DIR_OBJ} -name *.o -exec rm -rvf '{}' \;
clear:
find ${DIR_OBJ} -name *.o | xargs rm -rvf
注意:
SRC = $(wildcard *.c)
等于指定编译当前目录下所有.c文件,如果还有子目录,比如子目录为inc,则再增加一个wildcard函数,象这样:
SRC = $(wildcard *.c) $(wildcard inc/*.c)
$(DIR_OBJ)/%.o:inc/%.c
gcc -c $< $@ $(OPPTION)
(1)Makefile中的 符号 $@, $^, $< 的意思:
$@ 表示目标文件
$^ 表示所有的依赖文件
$< 表示第一个依赖文件
$? 表示比目标还要新的依赖文件列表
(2)wildcard、notdir、patsubst的意思:
wildcard : 扩展通配符
notdir : 去除路径
patsubst :替换通配符
gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld
上面这句表示在编译hello.c时-I /home/hello/include表示将/home/hello/include目录作为第一个寻找头文件的目录,
寻找的顺序是:/home/hello/include-->/usr/include-->/usr/local/include
-L /home/hello/lib表示将/home/hello/lib目录作为第一个寻找库文件的目录,
寻找的顺序是:/home/hello/lib-->/lib-->/usr/lib-->/usr/local/lib
-lworld表示在上面的lib的路径中寻找libworld.so动态库文件(如果gcc编译选项中加入了“-static”表示寻找libworld.a静态库文件)
参考:
http://www.groad.net/bbs/read.php?tid-2920-page-e.html
http://blog.csdn.net/zqt520/article/details/7727051
http://blog.csdn.net/haoel/article/details/2886/