2009-06-19 6 views
2

私は自分のメイクファイルを手に入れて欲しいと思っています。まず、私はこれがPOSIX makeであると言いたいと思います。http://www.opengroup.org/onlinepubs/009695399/utilities/make.html BSDとGNU(Linux)の両方で動作するビルドシステムが必要です。オブジェクトとソースをメイクファイルで区切る

私が望むのは、ゼロメンテナンスのメークファイルです。 src /にあるすべての.cと.asmファイルをコンパイルし、オブジェクトファイルをobjs /に配置し、objs /のすべてをバイナリファイルにリンクします。

私はたくさんのことができますが、ソースとobjファイルを分けることはできません。

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

私の最も近いがこれです:これは私はまだC_OBJS = OBJS/foo.oのを指定する必要があり、問題と、そのようなを持っており、また、それはかろうじてないPOSIXであるため、BSDメイクでコンパイル

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

が、 GNU makeではありません。

答えて

1

POSIX版のmakeでは、明示的にスラッシュを含むファイル名をサポートしておらず、オブジェクトファイルとは別のディレクトリにあるソースファイルを分離する手段も提供していません。また、@caskeyで指摘されているように、 '%'文字を使用する表記はサポートされていませんが、そのようなルールが存在し、メタキャラクタとして予約されることが推奨されています。

したがって、標準のPOSIX makeでは、おそらくあなたが望むことはできません。

makeの具体的な実装では、実際には何を求めているのですか。しかし、makefileの移植性は限られています。 cmakeまたは自動ツール(autoconflibtoolautomake、など) -

は、ある種のメイクファイル生成システムを使用することを検討してください。

  • sconsの
  • アリ
  • ケーキ
  • コック
  • ブラジャー
  • ... と私は忘れてしまったダース:makeの基本的な概念の多くreworkingsのか1聞いていないか ...
0

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

objs/%.o : src/%.c 
    ${CC} ${CFLAGS} -c $< -o [email protected] 

最後に疑問符を忘れてしまい、私のコメントがより明確になります。

+0

これは皮肉なことですか?私はBSDとGNU makeの両方をサポートするために行くことができると思います。それはGNU makeで動作するようですが、私はBSDの作業に "近い"と思っています。 – Earlz

+0

実際にはまったく動作しませんBSD make – Earlz

関連する問題