Вот простая версия файла BUILD:
cc_library(
name = "ab",
srcs = ['a.c', 'b.c', 'logger.h'],
copts = ['-DFILE_ID=\\"ab\\"']
)
logger.h
содержит реализацию функции ведения журнала, которая использует макрос FILE_ID
.
В настоящее время выходные данные журнала одинаковы для a.c
и b.c
. Однако я хочу, чтобы в выходных данных журнала отображалось имя исходного файла. Следовательно, a.c
должен быть скомпилирован с -DFILE_ID="a"
. И файл b.c
должен быть скомпилирован с -DFILE_ID="b"
.
Использование __FILE__
в logger.h
не поможет, потому что __FILE__
содержит "logger.h"
в logger.h
.
I думал создать cc_libraries для каждого файла. c. Тем не менее, я должен был бы указать макрос вручную и специально для каждой cc_library. Кроме того, мне пришлось бы связать библиотеки - и я не знаю, как это сделать.
Или я должен использовать оболочку для компилятора, оболочку, которая добавляет определение макроса в командную строку, а затем вызывает компилятор? Это звучит немного дороже. И как бы я это сделал? Поместите оболочку в $ PATH где-нибудь до gcc
?