AIX、Linux、および SunOS で動作し、環境ごとに異なるコンパイラ オプションを提供できるメイクファイルを作成するにはどうすればよいですか?
OS を記述する環境変数にアクセスできますが、AIX の make ユーティリティは ifeq を好まないため、次のようなことはできません。
ifeq($(OS), AIX)
CFLAGS = $(CFLAGS) <IBM compiler options>
endif
AIX、Linux、および SunOS で動作し、環境ごとに異なるコンパイラ オプションを提供できるメイクファイルを作成するにはどうすればよいですか?
OS を記述する環境変数にアクセスできますが、AIX の make ユーティリティは ifeq を好まないため、次のようなことはできません。
ifeq($(OS), AIX)
CFLAGS = $(CFLAGS) <IBM compiler options>
endif
次のような構成を使用できます。
CFLAGS_AIX =
AIXフラグ
CFLAGS_Linux =
Linuxフラグ
CFLAGS_SunOS =
SunOSフラグ
CFLAGS = $(CFLAGS_$(OS))
Makefile の移植性は、オペレーティング システムに直接関係するのではなく、問題のプラットフォームでの make の実装に関係しています。(そのため、make の実装が OS から推測される可能性がある (ただし正確ではない) という間接的な関係があります。) 一般に、これは多くの解決策が提案されている難しい問題です。移植可能な makefile を生成する automake を調べることをお勧めします。ただし、異なる unixen のフラグを設定する問題に対する automake の解決策は、(基本的に)「しないでください」であるため、魅力的ではないかもしれません。プラットフォームに基づいてオプションを設定するのではなく、構成時にホストまたはユーザーによって提供される機能に基づいて、どのフラグが必要かを決定することが哲学です。プラットフォームに基づいてフラグを割り当てる問題に対する autoconf/automake ベースの便利な解決策の 1 つは、configure 時に CFLAGS を割り当てるプラットフォームごとに個別のファイルを用意し、configure を実行しているユーザーの CONFIG_SITE 環境変数でそのファイルを指定することです。 . プラットフォームに基づいて、ユーザーのログイン スクリプトで CONFIG_SITE を割り当てることができます。(つまり、configure/make からログイン セットアップに問題をプッシュします) これにより、ソフトウェアを構築しているユーザーに対して割り当てが透過的になります。(透過的ですが、簡単にオーバーライドできます)。プラットフォームに基づいて、ユーザーのログイン スクリプトで CONFIG_SITE を割り当てることができます。(つまり、configure/make からログイン セットアップに問題をプッシュします) これにより、ソフトウェアを構築しているユーザーに対して割り当てが透過的になります。(透過的ですが、簡単にオーバーライドできます)。プラットフォームに基づいて、ユーザーのログイン スクリプトで CONFIG_SITE を割り当てることができます。(つまり、configure/make からログイン セットアップに問題をプッシュします) これにより、ソフトウェアを構築しているユーザーに対して割り当てが透過的になります。(透過的ですが、簡単にオーバーライドできます)。