Скажем, я использую некоторую библиотеку C или С++, созданную из заголовков и некоторых исходных файлов, которые скомпилированы в статическую или общую библиотеку, с которой я могу связать.
В заголовках библиотеки (десятки... или сотни файлов) определены некоторые макросы/символы.
Теперь я хочу использовать эту библиотеку в проекте, который также определяет некоторые макросы и символы. Конечно, я хочу избежать столкновений имен, как это сообщалось иногда, особенно с windows.h. Но в целом я хочу сохранить контроль над тем, что действительно экспортируется из этого заголовка.
Я могу создать список определенных символов с опциями препроцессора gcc:
gcc -E -dM include/great_lib.h | sort -V >symbols.txt
Это выводит в файле symbol.txt отсортированный список всех определенных символов, включенных в файл пользователя, когда он включает этот заголовок.
Однако он дает только символ не файл, в котором он был определен.
У меня такое ощущение, что это может быть полезной информацией. Например, чтобы проверить, переопределен ли какой-либо системный макрос в "great_lib.h" или его потомках. Несчастье, после проверки опций препроцессора gcc, я не вижу способа сделать это с помощью gcc.
Например, вместо того, чтобы указывать только мне:
#define M_PI 3.14159265358979323846
он произведет
#define M_PI 3.14159265358979323846; /usr/include/math.h
Возможно, что-то с опцией -dN? Но его вывод запутан для меня, он требует дальнейшей обработки текста, и я не понимаю, как информация накладывается. Или более простой способ?
Похожие вопросы: