質問
メイクファイルを思い通りに動かすのに苦労しています。まず、 http:/のように、これがPOSIX makeであると言いたいです。 /www.opengroup.org/onlinepubs/009695399/utilities/make.html BSDとGNU(Linux)の両方で動作するビルドシステムが必要です。
私が望んでいるのは、ゼロメンテナンスメイクファイルです。 src /のすべての.cおよび.asmファイルをコンパイルし、オブジェクトファイルを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ではコンパイルしません。
解決
POSIXバージョンのmakeは、スラッシュを含むファイル名を明示的にサポートしていません。また、オブジェクトファイルとは異なるディレクトリのソースファイルを分離することもできません。また、@ caskeyで述べたように、「%
」文字を使用した表記はサポートしていませんが、そのようなルールが存在することを注記し、メタキャラクターとして使用するために予約することを推奨しています。
その結果、標準のPOSIX make
で望んでいることを実行できない可能性があります。
実際には、多くの場合、特定のmakefile
の実装で求めることを実行できますが、結果のcmake
の移植性は限られています。
何らかの種類のメイクファイル生成システムの使用を検討してください-autoconf
または自動ツール(libtool
、automake
、<=>など)。または、<=>:
- scons
- ant
- ケーキ
- クック
- ブラス
- ... そして私が忘れてしまったか聞いたことのないダース ...
他のヒント
POSIX makeは次のような構造をサポートしていませんか?
objs/%.o : src/%.c
${CC} ${CFLAGS} -c $< -o $@
最後に疑問符を忘れてしまった、それが私のコメントをより明確にすることを願っています。