首页 > 解决方案 > 生成文件项目

问题描述

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

标签: cmakefileembeddedautotools

解决方案


我想知道是否有一种方法可以从特定目录自动添加源文件而不将它们写入 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 脚本来生成 Automake 代码,用于_SOURCES命名.c指定目录(即src/myprog)中所有文件的定义。myprog_sources.am为简单和安全起见,这已写入其自己的文件 ,并且该Makefile.am文件使用 Automakeinclude指令来合并它。当您想针对不同的源文件补充调整构建时,您可以运行该脚本。您还可以通过手动更新源列表来临时更改源列表,而无需运行脚本。

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


推荐阅读