3

次の通常の (手書きの) makefile があります。

all: $(patsubst %.c,%.so,$(wildcard *.c))

%.so: %.c
     $(CC) $(CFLAGS) $(LDFLAGS) -rdynamic -o $@ $^

この makefile を autotools に変換する必要があります (CFLAGS と LDFLAGS に適切なものを入力するためのプライマリ) autotools のドキュメントを最初に読んだとき、autotools はすべてのターゲットを事前に知る必要があるため、これは不可能だと思いました...しかし、私は間違っているかもしれません.

何か案が ?

4

2 に答える 2

2

Automake は確かにすべてのファイル名を知りたがっていますが、automake を実行する前に Makefile.am を作成するブートストラップ スクリプトを使用することは非常に一般的です。かなり単純な例を次に示します。

#!/bin/sh

cat Makefile.am.head > Makefile.am
ls *.c | sed 's/$/ \\/' >> Makefile.am
cat Makefile.am.tail >> Makefile.am
autoreconf -ivf

autotools を使用する場合、おそらく *.so を生成するルールを記述したくないでしょうが、libtool と LTLIBRARIES プライマリを使用する必要があることに注意してください。

于 2012-11-23T17:27:26.613 に答える
0

何かのようなもの

bin_PROGRAMS = program1
if boolean_flag
    bin_PROGRAMS += program2
endif

Makefile.am で動作します (tm) -- フラグの設定方法を理解するだけで済みます

于 2012-11-23T13:04:10.263 に答える