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 来更新依赖列表。
我正在尝试 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 来更新依赖列表。