6

次のような共有ライブラリを構築するための Makefile を作成しました。

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

これが一般的な操作のように思われる場合は、明示的なアクションを実行することを避けたいのですが、これを標準化するための暗黙のルールやその他の組み込み機能はないようです。現在 Linux で GNU Make を使用していますが、OS X でも動作させるにはこれが必要です。

編集: コンパイラ/リンカー フラグではなく、make ルールについて質問しています。

共有ライブラリを構築するためのクリーンで再利用可能な Makefile ルールを推奨できますか? おそらく%.so:or.c.so:型のルールでしょうか?

4

2 に答える 2

10

移植性については、統合を検討し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統合を使用することもできます。

于 2009-05-20T16:46:37.417 に答える
6

共有ライブラリの構築はプラットフォームに依存します。たとえば、使用しているフラグは、ELFプラットフォームのGCCでは問題ありません。たとえば、cygwinの場合、他のフラグが必要な他のプラットフォームやコンパイラには-fPICを追加しません。

次のいずれかが必要です。

  • ユーザープラットフォームのフラグを設定するオプションを提供します。
  • Autotoolsのような標準のビルドシステムを使用する
于 2009-05-20T12:00:26.557 に答える