2016-12-09 2 views
0

Я использую директиву препроцессора __BASE_FILE__ в моем проекте C, построенном с помощью GCC. Проблема в том, что двоичный файл, созданный двумя разными компьютерами, должен быть идентичным, поэтому путь не может появиться в создаваемом двоичном файле.Получение имени файла без пути в двоичном файле с помощью gcc

Я не могу найти способ сжать строку, возвращаемую __BASE_FILE__ (содержащую полный путь к файлу) во время предварительной обработки. Есть ли способ сделать это ?

Эта строка используется внутри макроса, как это:

#define MY_MACRO() \ 
{ \ 
    int file_name_size = sizeof(__BASE_NAME__); \ 
    char* file_name = __BASE_NAME__; \ 
    \ 
    a_function_that_use_these_variables(file_name, file_name_size); \ 
} 

Так что я хотел бы иметь __BASE_FILE__, который содержит только имя файла, а не путь.

+0

Как насчет того, чтобы добавить '' -D__BASE_FILE_NAME __ = $ (notdir $ <) 'в' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' ? –

+0

Это решение работает для меня! –

ответ

0

Вы можете использовать strrchr найти '/' или basename, чтобы захватить имя файла в выполнения

0

Как насчет вас добавить что-то вроде -D__BASE_FILE_NAME __ = $ (notdir $ <) до $ (CC) рецепты Makefile (определение базового имени первого предпосылки как макроса BASE_FILE_NAME)?

Это решение работает.