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