最近在用海思的makefile编译一些库,在遇到C和CPP联合混编的时候出现一些问题,以此做个记录
Makefile如下:
SMP_SRCS := $(shell find ./ -name "*.c")
SMP_SRCPPS := $(shell find ./ -name "*.cpp")
OBJS := $(SMP_SRCS:%.c=%.o)
CPPOBJS := $(SMP_SRCPPS:%.cpp=%.o)
#新增链接头文件,使用-I参数
INC_FLAGS := -I$(LOCAL_PATH)/src
#编译.so需要用到-fPIC -shared编译选项
CFLAGS += -fPIC -shared
CFLAGS += $(COMM_INC)
#链接第三方库
LFLAG := -llog
#指定第三方库的路径
LFLAG += -L$(LIB_PATH)
TARGET := libxxx.so
TARGET_PATH:= $(LIB_PATH)
CFLAGS += $(INC_FLAGS)
.PHONY : clean all
all: $(TARGET)
$(TARGET):$(COMM_OBJ) $(OBJS) $(CPPOBJS)
@$(CPP) $(CFLAGS) -lpthread -lm -o $(TARGET_PATH)/$@ $^ -Wl,--start-group $(LFLAG) $(LIBS) -Wl,--end-group
#$(CPPOBJS):%.o:%.cpp
# @$(CPP) -c $< $(CFLAGS) -lpthread -lm -o $@ -Wl,--start-group $(LFLAG) $(LIBS) -Wl,--end-group
#这里指定cpp文件用arm-himix200-linux-g++去编译,但是后面不需要跟LFLAG和LIBS,所以去掉就正常了
$(CPPOBJS):%.o:%.cpp
@$(CPP) -c $< $(CFLAGS) -lpthread -lm -o $@
clean:
@rm -f $(TARGET_PATH)/$(TARGET)
@rm -f $(OBJS)
@rm -f $(CPPOBJS)
@rm -f $(COMM_OBJ)
以上CC和CPP别的地方已经定义过了,相关的变量也是定义过了,就不全部贴出来了。另外虽然TARGET下用的也是CPP,但是实际编译里面的.c文件还是用的gcc工具