1

同じ C ソース ファイルから 2 つのターゲット (実行可能ファイルと共有ライブラリ) をビルドしています。共有ライブラリではコードが再配置可能 (-fPIC でコンパイル) である必要がありますが、さまざまな理由で実行可能ファイルで再配置可能コードを使用できません。Makefileでこの状況を処理する標準/一般的な方法はありますか?

4

2 に答える 2

1

オブジェクトファイル用に2つのディレクトリを用意することをお勧めします。1つは標準オブジェクト用で、もう1つは再配置可能オブジェクト用です。このようなもの:

$(STANDARD_OBJS) = $(addprefix $(STANDARD_OBJS_DIR)/, $(OBJS))
$(RELOC_OBJS) = $(addprefix $(RELOC_OBJS_DIR)/, $(OBJS))

$(RELOC_OBJS_DIR)/%.o: CCFLAGS += -fPic
$(RELOC_OBJS_DIR)/%.o $(STANDARD_OBJS_DIR)/%.o: $(SRC)/%.cc
    g++ $< -o $@

(より洗練されたバリエーションがありますが、これで始められます。)

于 2013-01-10T23:36:51.253 に答える
0

バイナリビルドのターゲットがstatic_libに依存して使用するように、いくつかのルールを挿入します。

shared_lib:whatever.so..。

static_lib:whatever.a..。

バイナリ:static_lib

于 2013-01-08T22:24:26.120 に答える