我正在尝试在运行时(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。
答案 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来更新依赖列表。