https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70268
Bug ID: 70268
Summary: add option -ffile-prefix-map to map one directory name
(old) to another (new) in __FILE__, __BASE_FILE__and
__builtin_FILE()
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: other
Assignee: unassigned at gcc dot gnu.org
Reporter: hongxu.jia at windriver dot com
Target Milestone: ---
Hi all,
I come from OpenEmbedded community (https://www.yoctoproject.org/),
and we use the powerful gcc for cross compilation. Previously, with
the help of Richard Biener and Jakub Jelinek, PR69821 was fixed which
do not expose the build path to others while '-g' used.
But there is another similar issue, while '__FILE__' used, this macro
expands to the name of the current input file which has build path.
I know the tradition solution is using relative path to compile.
(Such as instead of 'gcc /full/path/to/test.c',
try 'cd /full/path/to; gcc test.c; cd -;')
But if '__FILE__' exists in included header file and the header
file in standard system directories, the above way doesn't work.
Here is my test case:
-----------------------------------------------
1. Prepare a C source file and a C include file
$ cat << ENDOF > test.c
#include <stdio.h>
#include <test.h>
int main(int argc, char *argv[])
{
printf("__FILE__ %s\n", __FILE__);
test();
return 0;
}
ENDOF
$ cat << ENDOF > test.h
#include <stdio.h>
void test(void)
{
printf("__FILE__ %s\n", __FILE__);
return;
}
ENDOF
2. Move include file to standard system directory.
$ sudo mv test.h /usr/include/
3. Compile C source file
$ gcc ./test.c -o test
4. Execute and the output shows full path header file.
$ ./test
__FILE__ ./test.c
__FILE__ /usr/include/test.h
-----------------------------------------------