makefile的写法

例子:

TARGET = main //输出程序名称
OBJ_PATH = objs //编译文件的输出目录
PREFIX_BIN = //安装路径

CC = g++
INCLUDES = -I include
LIBS =
CFLAGS =-Wall -Werror -g
LINKFLAGS =

SRCDIR = src/json src //源文件的路径 多个文件夹用空格隔开

C_SOURCES = $(wildcard *.c)

C_SRCDIR = $(SRCDIR)
C_SOURCES = $(foreach d,$(C_SRCDIR),$(wildcard $(d)/*.c) )
C_OBJS = $(patsubst %.c, $(OBJ_PATH)/%.o, $(C_SOURCES))

CPP_SOURCES = $(wildcard *.cpp)

CPP_SRCDIR = $(SRCDIR)
CPP_SOURCES = $(foreach d,$(CPP_SRCDIR),$(wildcard $(d)/*.cpp) )
CPP_OBJS = $(patsubst %.cpp, $(OBJ_PATH)/%.o, $(CPP_SOURCES))

default:init compile

$(C_OBJS):$(OBJ_PATH)/%.o:%.c
$(CC) -c $(CFLAGS) $(INCLUDES) $< -o $@

$(CPP_OBJS):$(OBJ_PATH)/%.o:%.cpp
$(CC) -c $(CFLAGS) $(INCLUDES) $< -o $@

init:
$(foreach d,$(SRCDIR), mkdir -p $(OBJ_PATH)/$(d);)

test:
@echo“C_SOURCES: $(C_SOURCES)”
@echo“C_OBJS: $(C_OBJS)”
@echo“CPP_SOURCES: $(CPP_SOURCES)”
@echo“CPP_OBJS: $(CPP_OBJS)”

compile:$(C_OBJS) $(CPP_OBJS)
$(CC) $^ -o $(TARGET) $(LINKFLAGS) $(LIBS)

clean:
rm -rf $(OBJ_PATH)
rm -f $(TARGET)

install: $(TARGET)
cp $(TARGET) $(PREFIX_BIN)

uninstall:
rm -f $(PREFIX_BIN)/$(TARGET)

rebuild: clean compile

results matching ""

    No results matching ""