Использование gcc с -std = c11 и g++ с -std = С++ 14.
например. для файла с именем src/dir/Hello.cxx
он должен расширяться до значения, например:
const char basename[] = "Hello";
или
const char basename[] = getStaticBasename(__FILE__);
где getStaticBasename()
- макрос (для источников C) или функция constexpr (для источников С++), что приводит к "Hello".
Мне нужно избегать разделения строки из __FILE__
во время выполнения, потому что путь и суффикс не должны компилироваться в исполняемый файл каким-либо образом.
Решение должно быть без зависимостей от огромных библиотек, таких как boost.
Поскольку у меня нет файлов makefile, такие решения, как this, не могут быть использованы в моем случае.
У кого-то есть решение для этого?
Изменить 2015-07-02:
- Я не влияю на то, как был вызван компилятор и компоновщик (иногда через make файл, иногда из командной строки или некоторую IDE (Eclipse CDT managed make, Crossworks, Xcode et cetera). Поэтому решение должно быть только в коде.
- Моим вариантом использования является предоставление какого-то "идентификатора общего региона" для небольшого решения регистрации каротажа. Код приложения (который использует мой регистратор) должен только
#include <Joe/Logger.h>
и в последующих вызовах, например.LOG_DEBUG(...)
Я буду неявно использовать автоматически сгенерированный "идентификатор общего региона". - Мое текущее решение состоит в том, что код приложения должен объявить
JOE_LOG_FILE_REGION(Hello);
(после#include <Joe/Logger.h>
), прежде чем он сможет разместитьLOG_DEBUG(...)
в своем коде.