Сразу скажу, что да, знаю, что есть autotools, но хочу попробовать все же обойтись одним мейкфайлом.
Есть библиотека, которая собирается под arm и x86, выглядит это все примерно так:
INCLUDEPATH=-I./include -I$(SRCINCL) -I$(USRLIBS)
LIBS= -lpthread
MAIN_SRC= \
./src/mylib.c \
./src/impl_1.c
all: arm
arm: TARGET=arm
arm: CC=$(CC_ARM)
arm: buildinfo clean depends ${TARGET_LIB} test
x86-64: TARGET=linux
x86-64: CC=$(CC_LINUX)
x86-64: buildinfo clean depends ${TARGET_LIB} test
$(TARGET_LIB): $(MAIN_SRC:.c=.o)
@echo linking: $@
@ $(CC) ${LDFLAGS} ${LIBS} -Wl,-soname,$(LIB_NAME).so.$(MAJOR).$(MINOR) -o $@ $^ ./libs/other/libother.a
@rm -f ./$(LIB_NAME).so
@ln -s -f $@ ./$(LIB_NAME).so
$(MAIN_SRC:.c=.o): %.o:%.c
@echo compile: "\t" $<" >>> "$@
@ $(CC) $(INCLUDEPATH) $(CFLAGS_LIB) $(DEFINES) $< -o $@
depends:
@echo depends!
@echo $(MAKE) $(TARGET)
@cd libs/other && $(MAKE) $(TARGET)
Теперь мне нужно добавить новую цель target2, которая бы собирала так же как arm цель, но вместо ./src/impl_1.c использовала бы файл ./src/impl_2.c
Я тут наговнокодил так, но это все выглядит максимально плохо конечно…
INCLUDEPATH=-I./include -I$(SRCINCL) -I$(USRLIBS)
LIBS= -lpthread
MAIN_SRC= \
./src/mylib.c
SRC_1= \
./src/impl_1.c
SRC_2= \
./src/impl_2.c
all: arm
arm: TARGET=arm
arm: CC=$(CC_ARM)
arm: buildinfo clean depends ${TARGET_LIB} test
target2: TARGET=arm
target2: CC=$(CC_ARM)
target2: buildinfo clean depends ${TARGET_LIB_2} test
x86-64: TARGET=linux
x86-64: CC=$(CC_LINUX)
x86-64: buildinfo clean depends ${TARGET_LIB} test
$(TARGET_LIB): $(MAIN_SRC:.c=.o) $(SRC_1:.c=.o)
@echo linking: $@
@ $(CC) ${LDFLAGS} ${LIBS} -Wl,-soname,$(LIB_NAME).so.$(MAJOR).$(MINOR) -o $@ $^ ./libs/other/libother.a
@rm -f ./$(LIB_NAME).so
@ln -s -f $@ ./$(LIB_NAME).so
$(TARGET_LIB_2): $(MAIN_SRC:.c=.o) $(SRC_2:.c=.o)
@echo linking: $@
@ $(CC) ${LDFLAGS} ${LIBS} -Wl,-soname,$(LIB_NAME).so.$(MAJOR).$(MINOR) -o $@ $^ ./libs/other/libother.a
@rm -f ./$(LIB_NAME).so
@ln -s -f $@ ./$(LIB_NAME).so
$(MAIN_SRC:.c=.o): %.o:%.c
@echo compile: "\t" $<" >>> "$@
@ $(CC) $(INCLUDEPATH) $(CFLAGS_LIB) $(DEFINES) $< -o $@
$(SRC_1:.c=.o): %.o:%.c
@echo compile: "\t" $<" >>> "$@
@ $(CC) $(INCLUDEPATH) $(CFLAGS_LIB) $(DEFINES) $< -o $@
$(SRC_2:.c=.o): %.o:%.c
@echo compile: "\t" $<" >>> "$@
@ $(CC) $(INCLUDEPATH) $(CFLAGS_LIB) $(DEFINES) $< -o $@
depends:
@echo depends!
@echo $(MAKE) $(TARGET)
@cd libs/other && $(MAKE) $(TARGET)
P.S. Я намерено многое выкинул из примера, не относящееся к сути.