Makefile を生成するために使用しているファイル Makefile.am があります。生成された Makefile には、次のようなものが必要です。
ifndef SOURCECODEPATH
SOURCECODEPATH := /home/root/source_code_path
endif
とても簡単なようですが、どうすればできるか知っている人はいますか?
Makefile を生成するために使用しているファイル Makefile.am があります。生成された Makefile には、次のようなものが必要です。
ifndef SOURCECODEPATH
SOURCECODEPATH := /home/root/source_code_path
endif
とても簡単なようですが、どうすればできるか知っている人はいますか?
でAM_CONDITIONALマクロを使用しconfigure.ac
ます。
スクリプトは、テストできる変数を設定します。たとえば、条件が有効な場合に空ではない変数に設定されます。AM_CONDITIONAL([ENABLE_SOURCECODEPATH], [test "x$ac_srcpath" != "x"])
次にMakefile.am
:
if !ENABLE_SOURCECODEPATH
SOURCECODEPATH = ...
endif
ただし、変数が定義されていない場合は変数を明示的に定義しているため、次のようにconfigure.ac
関係なく変数を定義する必要がありますAC_SUBST(SRCPATH, $ac_srcpath)
。
SOURCECODEPATH = @SRCPATH@ # or $(SRCPATH)
Makefile.am に含まれる補助的な makefile を単純に使用できます (これは拡張です)。
Makefile.am:
#...
include Makefile.env
#...
および Makefile.env:
ifndef SOURCECODEPATH
SOURCECODEPATH := /home/root/source_code_path
endif
automake
include
d Makefile.envに触れない (または解析しようとしない)
移植性のない Makefile を生成するために automake を使用するべきではありませんが、GNU make で使用するための Makefile を生成するためにこれを本当に実行したい場合は、単に . の前にスペースを追加できますendif
。
ifndef SOURCECODEPATH
SOURCECODEPATH := /home/root/source_code_path
endif
e
が最初の列にない場合、Automake はendif
automake 条件の最後として解析しようとはしませんが、テキストを逐語的に Makefile にコピーします。GNU-make は、条件付きのスペースを認識します (少なくとも、3.80 は認識します。他のものは試していません)。
次の解決策は、少なくとも GNU Make および BSD Make で機能するはずです。Brett Hale によるautotools ソリューションはどこでも機能するはずですが、かなり複雑です。
SOURCECODEPATH?=/home/root/source_code_path
実際、http://www.gnu.org/software/make/manual/make.html#Flavorsが言うように、?=
で宣言された変数に使用されます=
。で宣言された変数のデフォルト値を設定する必要がある場合は:=
、次のような構成を使用します。
ifeq ($(origin SOURCECODEPATH), undefined)
SOURCECODEPATH := /home/root/source_code_path
endif