Можно ли получить доступ к целевым флагам XC16/gcc из кода?
Я компилирую код для процессоров серии Microchip dspic33, используя компилятор Microchip XC16.
У меня есть код, который используется в нескольких приложениях (то есть он находится в библиотеке кода). Для определенных модулей я хочу убедиться, что определенные флаги компилятора установлены во время компиляции, в идеале с использованием препроцессора. В частности, меня интересует тестирование целевых флагов -mauxflash и -code-in-auxflash.
Есть ли способ проверить параметры компилятора во время компиляции?
Я попытался сбросить все #defines с помощью xc16-gcc -dM -E - dev/null, но, похоже, ничего не изменилось. Существует 3 определения, связанных с auxflash (AUXFLASH_LENGTH, __AUXFLASH_BASE и __HAS_AUXFLASH), но ничего не связано с целевыми флагами.
1 ответ
Не все флаги влияют на определения CPP, поэтому вы можете быть там SOL. ваше использование -dM -E
это лучший способ проверить.
Тем не менее, есть несколько функций, которые могут быть полезны для вас:
-grecord-gcc-switches
: здесь записываются все флаги, используемые во время компиляции, для каждого объекта в информации DWARF. тогда у вас может быть скрипт, который проверяет объекты и выдает ошибку, если он был построен без нужного вам флага.__attribute__((optimize("flags")))
: gcc позволяет принудительно устанавливать конкретные флаги для каждой функции.#pragma GCC optimize ("flags")
: gcc позволяет принудительно устанавливать определенные флаги на уровне файлов.