make: kompilace jednoho zdroje do dvou vystupu
Jan Kubik
jan.kubik na kb-soft.com
Pátek Duben 25 10:39:20 CEST 2003
Halo,
nemohu se dostat dal s nasledujicim problemem:
mam directory=/xxx/yyy/src, ve ktere se nalezaji soubory .c,
ze kterych ma byt vytvorena staticka knihovna. Pouzivam pro
tuto situaci nasledujici make file:
CC = gcc
CFLAGS=-g -Wall -I../../include
RESULT = ../../libs/$(RESULT_DB_LIB)
SRC = $(wildcard *.c)
OBJ = $(SRC:.c=.o)
$(RESULT): $(OBJ)
ar r $@ $?
to vse funguje prima -> objekty .o se vytvori ve vyse uvedene
directory, a ar z nich udela knihovnu.
Nova situace nastala s tim, ze source *.c se nyni daji pouzit pro
zhotoveni 2 ruznych knihoven. K tomu je zapotrebi pouze #ifdef
directiva u jednoho include v kazdem zdrojovem programu.
Zdrojaky jsem upravil a provedl nasledujici
existuji nyni 3 directory:
/xxx/yyy/src ve ktere se i nadale nalezaji soubory .c,
/xxx/yyy/libA
/xxx/yyy/libB
v directory libA a libB se nachazeji pouze makefiles s upravenou
radkou - napr. v libA:
CFLAGS=-g -Wall -I../../include -D__INCLUDE_A__
nyni jsem se snazil upravit vyse uvedeny makefile tak, aby se
objekty .o zapsaly do odpovidajici directory libA, libB a z techo
pak vyrobily odpovidajici knihovny.
Napr. jsem zkusil zmenit path pro cil nasledovne:
OBJ = $(notdir $(SRC:.c=.o))
To nefunguje patrne proto, nebot zabudovane inferencni pravidlo
vyzaduje pro cil a zdroj stejny path.
Nevim jak to udelat, abych nemusel v jednotlivych makefiles vypsat
vsechny zdrojove a cilove objekty?
Eventuelne jsem zvolil hloupou strategii a nekdo vi nejakou lepsi
fintu.
Za navrhy a podnety dekuji predem
S pozdravem
Jan
Další informace o konferenci Linux