automake 的自动检测源

Autodetect source for automake

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

我测试这个命令:

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

该命令运行良好(我通过在文件中添加重定向进行控制并且源代码正常)。

但是 makefile 不使用任何来源:

gcc  -g -O2    -o example 

如何存档我的 objective 以便自动找到所有来源?

p.s 我读到 automake 必须知道通话中的所有来源,这是正确的吗?这可以解释为什么我的脚本不起作用。

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

我检查了 Makefile 与我的脚本之间的区别,重点是这部分:

有脚本:

am_example_OBJECTS =

手动依赖:

am_example_OBJECTS = ./main.$(OBJEXT)

他看来 automake 需要自己知道源文件才能生成 makefile。

所以我找到了解决方法,

我在配置期间使用 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 来更新依赖列表。