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