0

他の人が書いたパッケージがあります。そのパッケージ内のファイルを変更できません。そのパッケージには、次のようなルールを持つ Makefile があります。

$(BIN)/progA:   <long list of .o files>
    $(LINK.cc) $^ -o $@

その Makefile の周りに GNU make "wrapper" を記述して、同じ .o ファイルのリストからのバイナリではなくライブラリを構築したいと考えています。理想的には、次のようなものが欲しいです:

include package/Makefile

$(LIB)/progA.so: <magically copy the prerequisites for $(BIN)/progA>
    $(LD) -shared  $(LDFLAGS) $^ $(LIBS) -o $@

もちろん、パッケージの Makefile から自分のリストにコピー アンド ペーストすることもできますが、そのパッケージは頻繁に更新されます。ビルド プロセスが Makefile 内のパッケージの変更に対する変更を魔法のように自動的に取得することを好みます。

私の唯一の他の解決策は複雑なものです: sed または awk または perl を使用してパッケージの Makefile をスキャンし、その .o ファイルのリストを取り出して、ラッパーの make ファイルの変数に割り当てます。できれば避けたいところです。

4

1 に答える 1

0

2 つのアイデアがあります。

まず、次のように実行します。

make -n bin/progA LINK.cc='OBJECTS:' | grep ^OBJECTS:

次に、出力をキャプチャします。-oただし、結果から手でなどを取り除く必要があります。

もう 1 つのアイデアは、「make -pn」を実行して make のデータベースのコピーを取得し、それを grep などで解析することです。

makefile を直接実行する場合と比べて、これらの利点は、変数などが make によって展開されることです。

于 2013-09-25T16:52:40.970 に答える