20

私は職場で更新されたビルド システムを試しています。現在、ターゲット プラットフォームに応じてコンパイラとフラグを設定する良い方法を見つけようとしています。

私がやりたいことは次のようなものです

switch $(PLATFORM)_$(BUILD_TYPE)
  case "Linux_x86_release"
     CFLAGS = -O3
  case "Linux_x86_debug"
     CFLAGS = -O0 -g
  case "ARM_release"
     CC = armcc
     AR = armlink
     CFLAGS = -O2 -fx
     ...

これは GNU Make ではサポートされていません。さて、私の最初の考えはただやることでした

-include $(PLATFORM)_$(BUILD_TYPE)

これはかなりまともな解決策ですが、ファイル間の違いの概要を把握するのが難しくなります。言うまでもなく、それぞれが一連の変数定義を含む適切な 60 ~ 80 個のファイルを作成して維持することを楽しみにしています。 .

これを達成するためのより良い方法を知っている人はいますか? つまり、別の変数に基づいて一連のフラグやその他のオプションを設定しますか?

4

4 に答える 4

33

どうですか:

CFLAGS_Linux_x86_release        = -O3
CFLAGS_Linux_x86_debug          = -O0 -g


CFLAGS  = ${CFLAGS_${PLATFORM}_${BUILD}}
于 2008-10-14T07:22:11.460 に答える
7

configureこのようなパラメーターの構成は、スクリプトのタスクになります。

そうは言っても、条件文条件付き関数の構文を調べることができます。たとえば、次のことを試すことができます。

ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_release)
    CFLAGS = -O3
endif
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_debug)
    CFLAGS = -O0 -g
endif
于 2008-10-14T07:09:42.500 に答える
5

gitで使用されるMakefile、Makefile自体で重要な構成タスク(ホストタイプのオンなど)を実行するMakefileの良い例です。それは実際には非常に読みやすく、かなり簡単に使用できます。

于 2008-10-14T18:35:25.967 に答える
-4

あなたのためにそれを行うシステム(automake / autoconf)への切り替えはもっと簡単かもしれません...

于 2008-10-14T13:55:36.033 に答える