Всем привет.
TL;DR: пытаюсь открыть исходники strace в как проект в NetBeans. И для этих целей скармливаю NetBeans вывод make -wnk
, который среда анализирует.
И вот тут проблема.
Нередко строка компиляции имеет вот такой вид:
gcc -DHAVE_CONFIG_H -I./linux/x86_64 -I./linux/x86_64 -I./linux -I./linux -I. -I. -DIN_MPERS -DMPERS_IS_mx32 -I./mpers-mx32 -Wall -Wempty-body -Wformat-security -Wignored-qualifiers -Wimplicit-fallthrough=5 -Winit-self -Wlogical-op -Wmissing-parameter-type -Wnested-externs -Wold-style-declaration -Wold-style-definition -Woverride-init -Wsign-compare -Wtype-limits -Wwrite-strings -Werror -g -O2 -MT libmpers_mx32_a-v4l2.o -MD -MP -MF .deps/libmpers_mx32_a-v4l2.Tpo -c -o libmpers_mx32_a-v4l2.o `test -f 'v4l2.c' || echo './'`v4l2.c
Т. е. файл исходного кода определяется как
`test -f 'file.c' || echo './'`file.c
Естественно, среда уже не может разобрать такое и «ломается» (файл не включён в проектную модель).
В исходных Makefile.am
такого нет – только в Makefile.in
, сгенерённых automake
.
Поиск приводит к /usr/share/automake-1.16/am/depend2.am
, содержащему вот такие правила:
?!GENERIC? %VERBOSE%%COMPILE% -MT %OBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o %OBJ% %SOURCEFLAG%`test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE%
?-o? %VERBOSE-NODEP%%COMPILE% %-c% %-o% %OBJ% %SOURCEFLAG%`test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE%
?!-o? %VERBOSE-NODEP%%COMPILE% %-c% %SOURCEFLAG%`test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE%
?!GENERIC? %VERBOSE%%LTCOMPILE% -MT %LTOBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o %LTOBJ% %SOURCEFLAG%`test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE%
?!GENERIC? %VERBOSE-NODEP%%LTCOMPILE% %-c% -o %LTOBJ% %SOURCEFLAG%`test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE%
У меня два вопроса к общественности:
- Какой смысл данного финта ушами? Если бы было
test -f && echo
, то я бы предположил, что файл из локального каталога (если есть) должен иметь более высокий приоритет, чем тот же файл изVPATH
. А в том виде, как есть, – непонятно. - Кажется, я не в каждом проекте, использующем
autotools
, встречал такое. Т. е. есть проекты наautotools
, которые тот жеNetBeans
открывает без проблем. Навскидку сейчас пример не приведу, но, может быть, есть кто-то, кто сможет объяснить, почему? Могут ли существовать проекты, использующиеautoconf
безautomake
? Часто ли такое встречается в природе?