自动检测源以进行自动制作

Autodetect source for automake

本文关键字:自动检测      更新时间:2023-10-16

我正在尝试做一个在运行时(make)找到所有依赖项(c和cpp文件)的 Makefile.am。

我测试这个命令:

example_SOURCES=$(shell find . -type f | grep -E '.c|.cpp' | awk '{L[NR]=$$0} END {{for (i = 1; i <=NR-1;i++) print L[i]"\"}; {print L[NR]}}')

该命令工作正常(我已经通过在文件中添加重定向来控制,并且源很好)。

但是制作文件不使用任何来源:

gcc  -g -O2    -o example 

如何归档自动创建所有来源的目标?

p.s 我已经读过自动制作必须知道所有来源,这是正确的吗?这可以解释为什么我的脚本不起作用。

更多详情 :我已经修改了 Makefile 生成并在example_sources上放置了回显,他包含我的所有文件。

我已经检查了带有我的脚本和没有脚本的 Makefile 之间的差异,重点是这部分:

使用脚本:

am_example_OBJECTS =

使用手动依赖:

am_example_OBJECTS = ./main.$(OBJEXT)

他似乎自动制作需要自己知道源文件才能生成生成文件。

所以我找到了一个解决方法,

我在配置过程中使用 sed 更改 Makefile.am。

# Source + dependency.
files=`find ./src/ -type f | grep -E '.h$$|.hpp$$|.c$$|.cpp$$' | sed 's//src//g'` 
sed -i '/.*_SOURCES.*/c'"$soft"'_SOURCES = '"$files"'' src/Makefile.am

它工作正常,当我们添加源时,我们只需要做 ./configure 来更新依赖项列表。