生成文件项目

时间:2021-04-29 10:25:48

标签: c makefile embedded autotools

我想知道是否有一种方法可以从特定目录自动添加源文件,而无需将它们写入 Makefile.am 。因此,如果存在,我需要一个选项。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

<块引用>

我想知道是否有一种方法可以从特定目录自动添加源文件,而无需将它们写入 Makefile.am 。

某些 make 实现(例如 GNU 的)具有解决此目标的功能,但没有可移植的机制,而 Autotools 都是关于可移植性的。因此,依赖这种机制将是糟糕的 Autotools 风格。

即使您对忽略可移植性影响感到满意,此操作的范围仍然有限,因为 Makefile.am 将源文件与其贡献的目标相关联。您需要在有问题的源目录和目标之间存在直接链接,或者可能在更具体的文件名模式和目标之间存在直接链接。有时这种关联存在,但有时不存在。

撇开便携性问题不谈,总的来说,我不太喜欢这种事情,因为它会设下一个陷阱。例如,如果您采用这种机制,则很难在不破坏构建的情况下添加源文件。在对现有项目进行自动加工时添加所有源名称的一次性成本并没有那么糟糕——我已经为几个大型项目做过这样的事情——并且在添加源时维护 Makefile.am 的成本是微不足道的.

但是如果您仍然想要这些东西,那么我建议使用源生成器。它可能看起来像这样:

Makefile.am

bin_PROGRAMS = myprog
include myprog_sources.am

generate_myprog_sources.sh

#!/bin/bash

myprog_sources=(src/myprog/*.c)
echo "myprog_SOURCES = ${myprog_sources[*]}" > myprog_sources.am

它使用单独的 shell 脚本为 _SOURCES 定义生成 Automake 代码,命名指定目录(即 .c)中的所有 src/myprog 文件。为简单和安全起见,它被写入自己的文件 myprog_sources.amMakefile.am 文件使用 Automake include 指令来合并它。当您想要为不同的源文件补充调整构建时,您可以运行该脚本。您还可以在不运行脚本的情况下手动更新源列表,从而对源列表进行临时更改。

这不是您要求的免提自动化水平,但它仍然非常自动化,并且更适合您使用的工具。

相关问题