我有一个使用GNU Autotools的项目QPhiX。有一个非常相关的项目叫做QPhiX-Codegen,它是前者需要的。整体构建过程如下所示:运行配置时运行脚本
- 在QPhiX-Codegen中运行
make
。这将编译代码生成器并运行它。运行时,它会创建平坦的C++代码。 - 运行一个Python脚本,该脚本使用模板引擎将该平面C++代码封装到完整的头文件和源代码文件中。这也会创建一个
CMakeLists.txt
,这样生成的代码就可以被编译。 - 运行
cmake
和make
对cmake
生成的Makefile
将生成的代码编译成静态库libqphix_codegen.a
。
这三样东西都包装在Bash脚本中,用./generate-and-compile $isa $cxx $cxxflags
调用。 ISA可以是AVX2
,C++编译器可以我mpiicpc
。
然后一个切换目录QPhiX并继续构建过程:
- 运行
./configure ... --enable-arch=ISA --with-codegen=path/to/codegen/directory CXX=$CXX CXXFLAGS=$CXXFLAGS
创建Makefile
。在该Makefile
中,它将具有所需的编译器标志以包含生成的头文件并链接到libqphix_codegen.a
。 - 运行
make
对./configure
生成的Makefile
。
该过程向用户公开了比真正需要更多的步骤。此外,用户必须将相同的ISA标志(CXX
和CXXFLAGS
)传递给两个不同的脚本。然后,他们还必须将代码生成器的路径放入./configure
。
我认为在QPhiX项目中让代码生成器成为git子模块是最方便的。然后,./configure
可以运行codegen/generate-and-compile
脚本并将选项传递给它。
我的问题是:我将如何在./configure
中运行脚本?我只是把我想要的片段放入configure.ac
?该文件看起来像一个shell脚本与一些宏,但我不知道这是否是正确的地方把它放在。
另请参阅Automake手册中的[27.8 Per-Object Flags Emulation](https://www.gnu.org/software/automake/manual/html_node/Per_002dObject-Flags.html)。 – jww