Как я могу передать указанный макрос c для каждой компиляции в Bazel? - PullRequest
0 голосов
/ 25 марта 2020

Вот простая версия файла 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?

...