2

メイクファイルを希望どおりに動作させるのに苦労しています。まず、これは POSIX の make であると言いたいと思います。http: //www.opengroup.org/onlinepubs/009695399/utilities/make.html のように、BSD と GNU (Linux) の両方で動作するビルド システムが必要です。 .

私が望んでいるのは、メンテナンス不要のメイクファイルです。すべての .c および .asm ファイルを src/ にコンパイルし、オブジェクト ファイルを objs/ に配置してから、objs/ 内のすべてをバイナリ ファイルにリンクするだけです。

いろいろできるのですが、ソースファイルとobjファイルを分けてもらうことができません。

組み込みのシェル スクリプト (POSIX 定義の /bin/sh を使用) が少し必要な場合は問題ありませんが、依存関係を正しく機能させることができません。ソース ファイルの方が新しい場合にのみ、オブジェクト ファイルをビルドするようにします。

私の最も近いものはこれです:

${C_OBJS}: ${HDRS} ${*:objs/%=src/%}.c
    ${CC} ${CFLAGS} -c ${*:objs/%=src/%}.c -o $*.o

これには、まだ C_OBJS=objs/foo.o などを指定する必要があるという問題があります。また、POSIX ではないため、BSD make でコンパイルされますが、GNU make ではコンパイルされません。

4

2 に答える 2

2

POSIX バージョンの make は、スラッシュを含むファイル名を明示的にサポートしておらず、オブジェクト ファイルとは別のディレクトリにあるソース ファイルを分離することもできません。また、@caskey が指摘したように、「 」文字を使用した表記はサポートしていませんが%、そのような規則が存在することに注意し、メタ文字として使用するために予約することを推奨しています。

したがって、標準の POSIX ではおそらくやりたいことができないでしょうmake

実際には、 の特定の実装を使用して目的を達成できることがよくありますmakeが、その結果、makefile移植性が制限されます。

ある種のメイクファイル生成システム、cmakeまたは自動ツール ( autoconflibtoolautomakeなど) の使用を検討してください。または の基本概念の多くの再加工の 1 つmake:

  • スコンズ
  • ケーキ
  • 料理
  • ブラジャー
  • ...そして、私が忘れた、または聞いたことのないダース...
于 2009-06-19T02:12:39.427 に答える
1

POSIX make は次のような構造をサポートしていませんか?

  objs/%.o : src/%.c
    ${CC} ${CFLAGS} -c $< -o $@

最後に疑問符を忘れました。私のコメントがより明確になることを願っています。

于 2009-06-19T00:19:23.493 に答える