自动检测automake的源代码

时间:2015-01-07 10:17:12

标签: c++ c makefile autotools automake

我正在尝试在运行时(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]}}')

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

但是makefile不使用任何来源:

gcc  -g -O2    -o example 

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

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

更多细节: 我修改了Makefile生成并在example_sources上放置了一个echo,并且它包含了我的所有文件。

我已经检查了Makefile与我的脚本之间的区别和没有,主要观点是这一部分:

使用脚本:

am_example_OBJECTS =

手动依赖:

am_example_OBJECTS = ./main.$(OBJEXT)

他似乎需要自己知道源文件以生成makefile。

1 个答案:

答案 0 :(得分:0)

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

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