gpt4 book ai didi

autotools - 在配置运行期间运行脚本

转载 作者:行者123 更新时间:2023-12-04 03:12:07 25 4
gpt4 key购买 nike

我有一个使用 GNU Autotools 的项目 QPhiX。前者需要一个非常相关的项目,叫做QPhiX-Codegen。整个构建过程是这样的:

  1. 在 QPhiX-Codegen 中运行 make。这将编译代码生成器并运行它。运行时,它将创建平面 C++ 代码。
  2. 运行一个 Python 脚本,该脚本使用模板引擎将平面 C++ 代码包装到完整的头文件和源代码文件中。这还将创建一个 CMakeLists.txt,以便可以编译生成的代码。
  3. cmake生成的Makefile上运行cmakemake,将生成的代码编译成静态库, libqphix_codegen.a.

这三件事都包含在一个 Bash 脚本中,该脚本使用 ./generate-and-compile $isa $cxx $cxxflags 调用。 ISA 可以是 AVX2,C++ 编译器可以是 mpiicpc

然后将目录切换到 QPhiX 并继续构建过程:

  1. 运行 ./configure ... --enable-arch=ISA --with-codegen=path/to/codegen/directory CXX=$CXX CXXFLAGS=$CXXFLAGS 创建生成文件。在该 Makefile 中,它将包含所需的编译器标志以包含生成的头文件并链接到 libqphix_codegen.a
  2. ./configure 生成的 Makefile 上运行 make

此过程向用户公开了比实际需要更多的步骤。此外,用户必须将相同的 ISA 标志、相同的 CXX 和相同的 CXXFLAGS 传递给两个不同的脚本。然后他们还必须将代码生成器的这条路径放入 ./configure.

我认为在 QPhiX 项目中让代码生成器有一个 git 子模块对用户来说是最方便的。然后 ./configure 可以运行 codegen/generate-and-compile 脚本并将选项传递给它。

我的问题是:如何在 ./configure 中运行脚本?我是否只是将我想要的片段放入 configure.ac 中?那个文件看起来像一个带有一些宏的 shell 脚本,但我不确定这是否是放置它的正确位置。

最佳答案

This process exposes more steps to the user than really needed. Also the user has to pass the same ISA flag, the same CXX and the same CXXFLAGS to two different scripts. Then they also have to put in this path to the code generator into the ./configure.

这些都是有效的批评。解决这些问题的最快和最简单的方法可能是编写一个小的包装脚本。但是你问,

How would I run a script in the ./configure? Do I just put the snippet I want into configure.ac? That file looks like a shell script with some macros, but I am not sure whether that would be the right spot to put it.

configure.acm4 宏处理器的输入,利用特殊配置和由 Autotools 和可能的其他来源提供的宏库。 Autoconf 使用 m4 处理它以生成 configure shell 脚本。

最后,如果您希望 configure 运行外部命令(例如另一个脚本),您必须直接在 configure.ac 中编写该命令(确实你可以这样做)或使用一个宏来将命令发送到输出脚本中。没有内置的通用宏。您必须小心避免或转义 m4 将尝试解释的语法,但这是可以做到的。实际上,宏库包含几个扩展为外部命令的宏示例,例如运行编译器的命令。

另一方面,configure 通过收集信息并编写和启动另一个 脚本config.status 来运行。您可以选择让 configure 发出您想要运行到 config.status 中的命令;你可以通过 AC_CONFIG_FILES 的第二个和/或第三个参数来做到这一点.

另一方面,更新主项目的配置脚本以通过另一个项目自动合并代码生成有效地将两个项目合并在一起。如果我打算那样做,那么我会倾向于执行比你似乎提议的更深入的合并。实际上,配置应该仅限于准备合适的 Makefile。所有的代码生成和构建最好由一个(可能是递归的)make 运行来处理。我看不出有任何理由认为您的情况无法实现,但设置它需要更多工作。

关于autotools - 在配置运行期间运行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44323703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com