質問

メイクファイルを思い通りに動かすのに苦労しています。まず、 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または自動ツール(libtoolautomake、<=>など)。または、<=>:

の基本概念の多くの修正の1つ
  • scons
  • ant
  • ケーキ
  • クック
  • ブラス
  • ... そして私が忘れてしまったか聞いたことのないダース ...

他のヒント

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top