私は、AutomoconfからAutomakeへのコンパイラー・オプションを取得するのに大変な時間を費やしています。私のソースファイルの中には、Automake per-object flagsを持っている:IA-32、Aarch32/64とPower8のための建築のフラグを必要とAES_FLAG
Autoconfから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へのコンパイラフラグを渡しますか?
_GCM_FLAG_などを扱う 'Makefile.in'または' Makefile'セグメントを追加できますか? –
ありがとう@ヴィセンテ。私はそれほど遠くない(つまり、 'Makefile.am'が' Makefile'に変わったところまで)十分にありました。 – jww
まれな状況でのみ、二重括弧が必要です。 –