3

Makefile を生成するために使用しているファイル Makefile.am があります。生成された Makefile には、次のようなものが必要です。

ifndef SOURCECODEPATH
   SOURCECODEPATH := /home/root/source_code_path
endif

とても簡単なようですが、どうすればできるか知っている人はいますか?

4

5 に答える 5

6

で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)
于 2013-01-28T00:37:31.330 に答える
4

Makefile.am に含まれる補助的な makefile を単純に使用できます (これは拡張です)。

Makefile.am:

#...
include Makefile.env
#...

および Makefile.env:

ifndef SOURCECODEPATH
   SOURCECODEPATH := /home/root/source_code_path
endif

automakeincluded Makefile.envに触れない (または解析しようとしない)

于 2013-01-29T15:48:50.143 に答える
0

移植性のない Makefile を生成するために automake を使用するべきではありませんが、GNU make で使用するための Makefile を生成するためにこれを本当に実行したい場合は、単に . の前にスペースを追加できますendif

ifndef SOURCECODEPATH
   SOURCECODEPATH := /home/root/source_code_path
 endif

eが最初の列にない場合、Automake はendifautomake 条件の最後として解析しようとはしませんが、テキストを逐語的に Makefile にコピーします。GNU-make は、条件付きのスペースを認識します (少なくとも、3.80 は認識します。他のものは試していません)。

于 2013-01-28T19:04:35.200 に答える
0

次の解決策は、少なくとも GNU Make および BSD Make で機能するはずです。Brett Hale によるautotools ソリューションはどこでも機能するはずですが、かなり複雑です。

SOURCECODEPATH?=/home/root/source_code_path
于 2013-01-28T16:54:51.427 に答える
0

実際、http://www.gnu.org/software/make/manual/make.html#Flavorsが言うように、?=で宣言された変数に使用されます=。で宣言された変数のデフォルト値を設定する必要がある場合は:=、次のような構成を使用します。

ifeq ($(origin SOURCECODEPATH), undefined)
  SOURCECODEPATH := /home/root/source_code_path
endif
于 2013-01-29T18:31:21.313 に答える