2009-05-19 18 views
5

Właśnie napisane Makefile do zbudowania udostępnionego biblioteki, podobne do następujących:Makefile dla bibliotek współdzielonych?

libmystuff.so: CFLAGS+=-fPIC -shared 
libmystuff.so: libmystuff.o otherstuff.o 
    $(CC) $(CFLAGS) -o [email protected] $^ 

chciałbym uniknąć robi wyraźne działania, gdy wydaje się to wspólnej pracy, ale wydaje się, że nie ma niejawny reguła lub inne wbudowane w celu standaryzacji tego. Używam GNU Make na Linuksie w tej chwili, ale będzie również potrzebne do pracy z OS X.

EDYTOWANIE: Pytam o reguły tworzenia, a nie flagi kompilatora/linkera.

Czy możesz polecić czyste, wielokrotnego użytku Makefile zasady budowania wspólnych bibliotek? Być może reguła typu %.so: lub?

Odpowiedz

9

Dla przenośności, że patrzę w integracji libtool.

define compile_rule 
     libtool --mode=compile \ 
     $(CC) $(CFLAGS) $(CPPFLAGS) -c $< 
endef 
define link_rule 
     libtool --mode=link \ 
     $(CC) $(LDFLAGS) -o [email protected] $^ $(LDLIBS) 
endef 

LIBS = libmystuff.la 
libmystuff_OBJS = libmystuff.lo otherstuff.lo 

%.lo: %.c 
     $(call compile_rule) 

libmystuff.la: $(libmystuff_OBJS) 
     $(call link_rule) 

install/%.la: %.la 
     libtool --mode=install \ 
     install -c $(notdir [email protected]) $(libdir)/$(notdir [email protected]) 
install: $(addprefix install/,$(LIBS)) 
     libtool --mode=finish $(libdir) 

libtool automatycznie doda -fPIC/-DPIC/-shared flagi jako właściwe, i generować cokolwiek .o/.a/.so pliki byłyby wykorzystywane na bieżącej platformie.

Albo możesz użyć integracji z libtoolem Automake.

+0

libtool wydaje się być najlepszym sposobem. Szkoda, że ​​podręcznik rzuca cię na wilki (patrz http://www.gnu.org/software/libtool/manual/libtool.html#Makefile-rules), chyba że używasz całego zestawu Autotools. – dwc

5

Budowanie bibliotek współdzielonych jest zależne od platformy. Na przykład flagi, których używasz są ok dla GCC dla platform ELF, dla cygwin, na przykład, nie dodajesz -fPIC dla niektórych innych platform i kompilatorów potrzebujesz innych flag.

Trzeba jedna:

  • Zapewnić odpowiednią opcję, aby ustawić flagi dla platformy użytkownika.
  • Zastosowanie standardowego systemu kompilacji jak Autotools
+0

Nic mi nie jest z flagami na platformę. Naprawdę pytam o zasady tworzenia. Zobacz edytowane pytanie, dzięki. – dwc

+0

dwc, zadanie pisania flag na platformę zostało wykonane. Nazywa się Autotools. Obiecuję ci, że będzie tysiąc razy łatwiejsze niż to, co wydaje ci się robić (co wygląda jak budowanie własnych Autotools od zera). –

Powiązane problemy