Как сделать макрос в хедере с разным поведением в сорсах?
Хочу сделать макрос для логирования такой, чтобы в одних файлах он автоматически писал одно имя бинаря, в других - другое. То есть у меня есть проект
utils
- logger
- logger.h
app_1
- ...
- main.cpp
- app_1_file.cpp
app_2
- ...
- main.cpp
- app_2_file.cpp
Я хочу чтобы в файлах app_1
мой вызов макроса LOG("hello")
выдавал надпись from app_1: hello
, а в файлах app_2
- from app_2: hello
. Для этого в макросе делаю что-то вроде (псевдокод):
#define LOG(text) if (__FILE__.contains("app_1")) std::print("from app_1: {}", text); else std::print("from app_2: {}", text)
Но в соседнем вопросе говорят, что вывод __FILE__
не гарантирован. Норм ли такое решение или можно лучше сделать?
Проблема в том, что использовать не макрос я не могу, т.к. на самом деле у меня не std::print
, а другой макрос из сторонней библиотеки для логирования, который требует раскрытия на месте вызова (чтобы правильно подхватить строчки и т.п.)