Portál AbcLinuxu, 8. května 2025 06:37
Snažím se udělat makefile pro knihovnu. Cílem je aby make static vytvořil libdfmt.a a make win32 vyrobil pře mingw win32libdfmt.a
Pokusil jsem se využít target specific hodnot proměnných.
A skoro to i funguje.
Cíl win32 přenastaví proměnnou NAME z libdfmt na win32libdfmt a přejde k cíli static. Na základě proměnné NAME by v cíl static měl mít perekvizitu ../win32libdfmt.a. Ale z nějkého důvodu je v perekvizitě použita stará hodnota z NAME. Ovšem výpis v těle vypíše správnou hodnotu.V terminálu se mi vypíše:
... AR target: name is win32libdfmt.a target name is ../libdfmt.a ... call from static target: name is win32libdfmt.aTak nevim - z nějakého důvodu to nejdřív vyrobí perekvizity a až potom se to pustí do vyhodnocování. Jak nějak elegantně vyřešit tu kroskompilaci ? Nebo dělám něco blbě ?
IDIR =../include ODIR=../obj DOC=../doc NAME=libdfmt CC=gcc AR=ar CFLAGS=-Wall -std=c99 -O0 -g INCLUDES = -I../ -I$(IDIR) -I/usr/include/libusb-1.0/ LIBS= -lusb-1.0 DEPS = $(wildcard ../*.h) $(wildcard $(IDIR)/*.h) OBJ = $(patsubst %.c,%.o,$(wildcard *.c)) VPATH = $(ODIR) ../ .PHONY: all all: test static %.o: %.c $(DEPS) mkdir -p $(ODIR) $(CC) -c -o $(ODIR)/$@ $< $(CFLAGS) $(INCLUDES) .PHONY: static static: ../$(NAME).a $(info call from static target: name is $(NAME).a ) ../%.a: $(OBJ) $(info AR target: name is $(NAME).a target name is $@) $(AR) rsc $@ $(patsubst %, $(ODIR)/%, $(OBJ)) .PHONY: win32 win32: CC = /usr/bin/i686-w64-mingw32-gcc win32: AR = /usr/bin/i686-w64-mingw32-ar win32: ODIR := $(ODIR)/win32 win32: NAME := win32$(NAME) win32: static .PHONY: clean clean: rm -rvf $(ODIR) *~ core $(INCDIR)/*~ ../*.a ../*.bin .PHONY: test test: ../$(NAME).bin ../$(NAME).bin: $(OBJ) gcc $(CFLAGS) -o ../$(NAME).bin $(patsubst %, $(ODIR)/%, $(OBJ)) $(LIBS) && chmod +x ../$(NAME).bin .PHONY: doc doc: $(DOC)/html/index.html $(DOC)/html/index.html: $(wildcard ../*.h) $(DOC)/Doxyfile cd $(DOC) && doxygen $(ODIR): mkdir -p $(ODIR)
Na otázku zatím nikdo bohužel neodpověděl.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.