0
A = "demo"
%.o:%.cpp
    $(CC) -c $^ $(A) -o $@
default:$(all_objs)
game:A = $(shell read -p 'Enter game version: ' gv && echo $$gv)
game:$(all_objs)

上記の単なるスニペットmakefile。I の場合make game、主な問題は、ソースをコンパイルするたびに $(A) が展開され、ユーザーにゲームのバージョンを何度も入力するよう要求することです。game$(A) には、ユーザーがターゲットを作成しない場合にのみ、デフォルトのコンテンツ「デモ」があります。

では、 $(A) を展開 && するように設定する方法はありますか?

4

1 に答える 1

0
game:A:=$(shell read -p 'Enter game version: ' gv && echo $$gv)

「:=」に注意してください

更新: 実際のビルド ターゲットでユーザー入力を読み取ることはお勧めできません。Make は広く使用されており、それを呼び出す人は誰でも、これを予期していません。

あなたが望んでいたことを行うには2つの方法があります:

  1. make version=some_version. 変数をオーバーライドしversionます (名前はほとんど何でもかまいません)。メイクファイルでデフォルト値を割り当てた場合 - に変更されsome_versionます (変数がフラグ付きで宣言されていない限りoverride、この動作は無効になります)

  2. make config必要な構成アクションを実行し、config.mk などに保存するルールを作成します。makefile には、-include config.mk(「-」記号は、このファイルが欠落している可能性があることを示しています。必要な場合 (たとえば、必須の構成オプションが含まれている場合)、マイナス記号を削除してください)。

于 2013-10-17T10:48:46.117 に答える