2017-11-03 22 views
2

私は、AutomoconfからAutomakeへのコンパイラー・オプションを取得するのに大変な時間を費やしています。私のソースファイルの中には、Automake per-object flagsを持っている:IA-32、Aarch32/64とPower8のための建築のフラグを必要とAES_FLAGAutoconfからAutomakeにコンパイラフラグを渡すには?

## Makefile.am 
librijndael_simd_la_SOURCES = rijndael-simd.cpp 
librijndael_simd_la_CXXFLAGS = $(AES_FLAG) 

。他のプラットフォームはフラグを取得しません。以前は、フラグはMakefile.amにハードコードされていました。

私は初期Autotool群のサポートを構築していて、私はハードコードにはAutoconfのオプションをしようとしています:

# configure.ac 
AC_SUBST([GCM_FLAG], [-mssse3 -mpclmul]) 
AC_SUBST([AES_FLAG], [-msse4.1 -maes]) 
AC_SUBST([SHA_FLAG], [-msse4.2 -msha]) 
... 
AC_OUTPUT(Makefile) 

をしかし、それは、その結果:

$ ./configure 
... 

checking how to run the C++ preprocessor... g++ -E 
./configure: line 16195: -mpclmul: command not found 
./configure: line 16199: -maes: command not found 
./configure: line 16201: -msha: command not found 

Autoconfのマニュアル、3.1.2 The Autoconf Language、言いますダブルブラケット([[および]])を使用する:

AC_SUBST([[GCM_FLAG]], [[-mssse3 -mpclmul]]) 
AC_SUBST([[AES_FLAG]], [[-msse4.1 -maes]]) 
AC_SUBST([[SHA_FLAG]], [[-msse4.2 -msha]]) 

それは(私はほとんどの人が、マニュアルに従わない理由は、これがあると思います)、その結果:

$ autoreconf --force --install 
... 

error: AC_SUBST: `[AES_FLAG]' is not a valid shell variable name 
configure.ac:50: the top level 
autom4te: /usr/bin/m4 failed with exit status: 1 
aclocal: error: echo failed with exit status: 1 
autoreconf: aclocal failed with exit status: 1 

私は、これは文書であると信じていますが、それは例やトラブルシューティングの手順を提供していません:7.2 Setting Output Variables

私は単純に、この簡単なタスクを実行する方法を示す1000のブログがあると思っていましたが、それほど表示されません:autoconf pass compiler option to automake

どのようにして、AutoconfからAutomakeへのコンパイラフラグを渡しますか?

+0

_GCM_FLAG_などを扱う 'Makefile.in'または' Makefile'セグメントを追加できますか? –

+0

ありがとう@ヴィセンテ。私はそれほど遠くない(つまり、 'Makefile.am'が' Makefile'に変わったところまで)十分にありました。 – jww

+0

まれな状況でのみ、二重括弧が必要です。 –

答えて

1

設定が正しいと思われます。 改行、またはMakefile.amまたはconfigure.acファイル内の他の文字が建物のシステムを壊している可能性があります。

私は、Makefileの生成を参照することをお勧めします。あなたはどのように見えるかを確認するためにgrep -nC5 AES_FLAG Makefileを行うことができます。それは私たちにいくつかのヒントを与えるかもしれません。

+0

ありがとう@ヴィセンテ。この問題は引用符がないため追跡されました。つまり、 'AC_SUBST([GCM_FLAG]、[" -mssse3 -mpclmul "])'を使う必要がありました。一重または二重のブラケットでは十分ではなかった。 – jww

+0

@jwwこの謎を解きました。私はあなたの質問に非常に困惑しました! –

+0

@jww、私もあなたの問題を解決してうれしく思います。しかし、あなたが説明する解決法は理にかなっていません。あなたの 'autoreconf'エラーは消え去ってしまっているかもしれませんが、あなたが思っているものとは異なるフラグを指定することになるでしょう。 –

関連する問題