如何将编译器标志从Autoconf传递到Automake?

时间:2017-11-03 20:13:05

标签: autotools autoconf automake compiler-options

我正忙着从Autoconf到Automake获得编译器选项。我的一些源文件有Automake per-object flags

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

AES_FLAG需要IA-32,Aarch32 / 64和Power8的架构标志。其他平台没有标志。以前,这些标志在Makefile.am中是硬编码的。

我正在尝试对Autoconf中的选项进行硬编码,因为我正在构建初始的Autotools支持:

# 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?

1 个答案:

答案 0 :(得分:1)

看起来你的配置是正确的。您的Makefile.amconfigure.ac文件中可能存在换行符或任何其他字符,这会破坏您的建筑系统。

我建议看看生成Makefile。您可以执行grep -nC5 AES_FLAG Makefile查看其外观。这可能会给我们一些提示。