Makefile для общих библиотек? - PullRequest
5 голосов
/ 20 мая 2009

Я только что написал Makefile для создания разделяемой библиотеки, похожую на следующую:

libmystuff.so: CFLAGS+=-fPIC -shared
libmystuff.so: libmystuff.o otherstuff.o
    $(CC) $(CFLAGS) -o $@ $^

Мне нравится избегать явных действий, когда это похоже на обычную операцию, но кажется, что не существует неявного правила или других встроенных функций, чтобы стандартизировать это. В настоящее время я использую GNU Make для Linux, но это понадобится и для OS X.

РЕДАКТИРОВАТЬ : Я спрашиваю о правилах make, а не о флагах компилятора / компоновщика.

Можете ли вы порекомендовать чистые, повторно используемые правила Makefile для создания общих библиотек? Возможно, правило типа %.so: или .c.so:?

Ответы [ 2 ]

9 голосов
/ 20 мая 2009

Для мобильности я бы посмотрел на интеграцию libtool.

define compile_rule
        libtool --mode=compile \
        $(CC) $(CFLAGS) $(CPPFLAGS) -c $<
endef
define link_rule
        libtool --mode=link \
        $(CC) $(LDFLAGS) -o $@ $^ $(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 $@) $(libdir)/$(notdir $@)
install: $(addprefix install/,$(LIBS))
        libtool --mode=finish $(libdir)

libtool автоматически добавит флаги -fPIC / -DPIC / -shared в зависимости от ситуации и сгенерирует любые файлы .o / .a / .so, которые будут использоваться на текущей платформе.

Или вы можете использовать Automake для интеграции с libtool.

5 голосов
/ 20 мая 2009

Сборка разделяемых библиотек зависит от платформы. Например, флаги, которые вы используете нормально для GCC для платформ ELF, например для cygwin, вы не добавляете -fPIC для некоторых других платформ и компиляторов, вам нужны другие флаги.

Вам нужен один из:

  • Предоставить возможность установки флагов для пользовательской платформы.
  • Используйте стандартную систему сборки, такую ​​как Autotools
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...