http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45809
Summary: Canonicalize file names output during dependency
generation
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: preprocessor
AssignedTo: [email protected]
ReportedBy: [email protected]
I have a make file responsible for files in several directories (say
main_dir, other_dir).
The files in these directories include header files using relative paths:
----other_dir/source.c
# include "../main_dir/header.h"
----
GCC, invoked with -MMD, produces dependency files of the form
----other_dir/source.d
../other_dir/source.o:\
../other_dir/../main_dir/header.h
----
These dependency files are included via
----Makefile
-include ../other_dir/*.d
----
If header.h is generated using a rule of the form
----Makefile
header.h: header.m4
m4 header.m4 > header.h
----
(GNU) make fails to realize that a change to header.m4 requires a rebuild
of ../other_dir/source.o, since make uses string compares to identify targets
with prerequisites.
Pseudo-targets in Make require this sort of comparison.
Were GCC to canonicalize the file names in the dependency files it generates:
----other_dir/source.d
../other_dir/source.o:\
header.h
----
this problem would be solved.