自动推导Makefile示例

CC = arm-openwrt-linux-muslgnueabi-gcc
C++ = arm-openwrt-linux-muslgnueabi-g++
LINK = arm-openwrt-linux-muslgnueabi-g++
AR = arm-openwrt-linux-muslgnueabi-ar
STRIP = arm-openwrt-linux-muslgnueabi-strip

# user modify here
LIB_PATHS = ./ 
#
INC_PATHS = ./ 
#
SRC_PATHS = ./ 
#
TARGET = sample_test
TARGET_LIB =  libtest

TARGET_STATIC = $(TARGET)_static
TARGET_DYNAMIC = $(TARGET)_dynamic
CFILES =  $(foreach n, $(SRC_PATHS), $(wildcard $(n)/*.c)) 
C++FILES = $(foreach n, $(SRC_PATHS), $(wildcard $(n)/*.cc $(n)/*.cpp)) 

DYNAMIC_LIBS_WITH_PATH = $(foreach n, $(LIB_PATHS), $(wildcard $(n)/*.so))
STATIC_LIBS_WITH_PATH = $(foreach n, $(LIB_PATHS), $(wildcard $(n)/*.a))
DYNAMIC_LIBS = $(foreach n, $(DYNAMIC_LIBS_WITH_PATH), -l$(patsubst lib%,%,$(patsubst %.so,%,$(notdir $(n)))))
STATIC_LIBS  = $(foreach n, $(STATIC_LIBS_WITH_PATH), -l$(patsubst lib%,%,$(patsubst %.a,%,$(notdir $(n)))))

INCLUDES = $(foreach n, $(INC_PATHS), -I$(n))
LDFLAGS = $(foreach n, $(LIB_PATHS), -L$(n))

STATIC_LDFLAGS = $(LDFLAGS) -Wl,-Bstatic -Wl,--start-group $(STATIC_LIBS) -Wl,--end-group -Wl,-Bdynamic -ldl  -lrt  -lpthread 
DYNAMIC_LDFLAGS = $(LDFLAGS) -Wl,-Bdynamic -Wl,--start-group $(DYNAMIC_LIBS) -Wl,--end-group -ldl  -lrt  -lpthread 

CCFLAGS = -c -g -fPIC  $(INCLUDES)
C++FLAGS = -c -g -fPIC $(INCLUDES)
OBJS = $(CFILES:%=%.o) $(C++FILES:%=%.o)
DEPS = $(OBJS:%=%.d)


all:$(TARGET_STATIC) $(TARGET_DYNAMIC)  # $(TARGET_LIB).so  $(TARGET_LIB).a

$(TARGET_LIB).so : $(OBJS)
    $(CXX) -shared -o $@ $^
$(TARGET_LIB).a : $(OBJS) 
    $(AR) -rcs -o $@  $^ 

$(TARGET_STATIC): $(OBJS)
    @echo "==> build static..."
    $(LINK) -o $@  $^  $(STATIC_LDFLAGS)
    $(STRIP) $(TARGET_STATIC)

$(TARGET_DYNAMIC): $(OBJS)
    @echo "==> build dynamic..."
    $(LINK) -o $@  $^  $(DYNAMIC_LDFLAGS)
    $(STRIP) $(TARGET_DYNAMIC)

$(filter %.c.o , $(OBJS)): %.o:%
    $(CC) $(CCFLAGS) -o $@  $< -MD -MP -MF $(@:%=%.d)

$(filter %.cpp.o %.cc.o, $(OBJS)): %.o:%
    $(C++) $(C++FLAGS) -o $@  $< -MD -MP -MF $(@:%=%.d)

clean:
    rm -rf $(TARGET_LIB)*
    rm -rf $(TARGET_STATIC)
    rm -rf $(TARGET_DYNAMIC)
    rm -rf $(OBJS)
    rm -rf $(DEPS)
    rm -rf *.o
    rm -rf *.d

-include $(DEPS)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值