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 -----------------------------------------------