Portál AbcLinuxu, 25. dubna 2024 16:21


Dotaz: Make Target-specific Variable Values

FoxVK avatar 2.1.2016 18:53 FoxVK | skóre: 1 | blog: Nora linuxáka
Make Target-specific Variable Values
Přečteno: 253×
Odpovědět | Admin

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.a 
Tak 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ě ?
Celý makefile:
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)

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Na otázku zatím nikdo bohužel neodpověděl.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.