原因: android build system 的 Makefile 好像沒有把 header 列入 depenedency check。
所以當修改一個 .h 檔,就要去找出所有 include 他的 source,作 touch。
這個動作可以分成:
- 找出所有包含 aa.h 的檔案
- 取出檔名
- touch 這些檔案
實例:
touch 所有 include system_properties.h 的 c source code.
找出所有含 system_properties.h 的 c 檔
find .-type f -name '*\.c' | xargs grep 'system_properties\.h
這樣會列出:
./system/core/init/init.c:#include <sys/system_properties.h>
./system/core/init/parser.c:#include <sys/_system_properties.h>
./system/core/init/property_service.c:#include <sys/_system_properties.h>
./build/tools/check_prereq/check_prereq.c:#include <sys/system_properties.h>
grep 的輸出包含 檔名跟 match location。
取出檔名:用 cut 把 ':' 後面都刪除
find . -type f -name '*\.c' | xargs grep 'system_properties\.h' | xargs cut -f1 -d ':'
結果就是:
./system/core/toolbox/watchprops.c
./system/core/toolbox/getprop.c
./system/core/libcutils/properties.c
./system/core/init/init.c
./system/core/init/parser.c
./system/core/init/property_service.c
./build/tools/check_prereq/check_prereq.c
這樣就可以餵給 touch了:
... 最後加上 | xargs touch