automake在目录中添加所有c文件

时间:2015-07-02 08:08:53

标签: autoconf automake

在automake的Makefile.am中,程序的来源列为

  

bin_PROGRAMS = os345v1

     

os345v1_SOURCES = os345.c os345interrupts.c os345semaphores.c

如何在特定目录和子目录中添加所有c文件,而不是指定单个文件?

2 个答案:

答案 0 :(得分:4)

在automake中使用通配符通常是个坏主意。

首先,您的automake项目可能会被处理与非GNU make实现一起使用(可能无法使用GNU-make扩展,例如$(wildcard *.c))。 autotools / automake的一个优势是它与目标系统及其工具链无关。

更重要的是,automake可能需要确切地知道您要构建哪些源文件。 这很重要,例如当您想要进行源外树构建时(例如,源代码在只读介质上,而构建在"其他地方):这是一个常见的用例对于分发(例如Debian),允许在一次运行中轻松地从同一个源构建多种风格(具有不同的配置标志)。

最后,不使用通配符可以保护您的构建免受杂散源代码的影响。例如。拥有" foo.c"和备份文件" foo_old.c" (例如,因为您正在重新实现" foo"并希望检查旧的实现并希望您的编辑器自动启用语法突出显示)位于同一文件夹中,可能会意外地构建两个文件多个相同符号的定义。

另请参阅automake documentation why automake does not support wildcards

答案 1 :(得分:-1)

GNU make has是通配符函数,例如

os345v1_SOURCES = $(wildcard *.c)

有关文件名的其他功能,请参阅GNU make手册部分Filename Functions

Makefile中适用的任何内容也适用于automake,因为automake将其automake文件转换为Makefile。

从这个意义上说,automake是一个宏预处理器。可以想象它类似于C的C预处理器,除了你保留转换文件,Makefile,以及你工作的源,Makefile.am。

相关问题