Установить G CC атрибут по умолчанию для всех функций (получить слабый символ для всех функций при установке обезьян) - PullRequest
1 голос
/ 06 апреля 2020

В настоящее время я пишу проект C, который включает отдельную тестовую сборку.

Тесты - это разные C процессы, которые используют исходный код для проверки каждой определенной функции в моем коде (TDD).

Я хочу, чтобы в этих тестах было исправление обезьян. Мне потребовалось некоторое время, чтобы посмотреть, что это можно сделать, и я думаю, что самый простой вариант - использовать функцию атрибута g cc: https://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Function-Attributes.html

Для тестовой сборки я бы хотел все мои функции будут слабыми (IE, я хочу такой же эффект, как если бы я написал __attribute__ (( weak)) перед любым объявлением функции моего C файла.)

Я бы хотел знать, есть ли способ передать этот слабый атрибут по умолчанию по умолчанию в качестве опции компиляции, а не делать это вручную каждый раз, когда мне это нужно. Прямо сейчас я использую макрос, который проверяет, тестируется ли сборка, и если да, добавьте эту строку перед каждой функцией, которую я хочу. Я бы предпочел не усложнять исходный код только для того, чтобы разрешить некоторые тестовые функции.

Эта topi c в Google загрязнена повторением одного и того же тривиального использования атрибута, но я не могу найти какой-либо способ Установка атрибута по умолчанию.

Однако я нашел эту книгу https://link.springer.com/chapter/10.1007%2F978-1-4302-0704-7_4, которая может содержать решение, но я не буду платить 30 баксов только в надежде на это. Поэтому здесь я задаю вопрос.

Некоторые могут подумать, что это плохая идея, но в моем сценарии это нормально, я думаю. Помните, что мой набор тестов состоит из множества моно C файлов, связанных с моим кодом, и помните, что новая опция сборки теста не повлияет на нормальную сборку.

1 Ответ

1 голос
/ 06 апреля 2020

Как насчет следующего?

  1. Вы создаете отдельный файл (назовем его слабым.h), все символы которого необходимо преобразовать в слабый в виде

#pragma weak func1

#pragma weak func2

#pragma weak func3

...

Во время тестовой компиляции вы добавляете значения по умолчанию, включая следующие: this

gcc -include weak.h ...

Я никогда не пробовал этот подход сам, но при этом ваш код выиграл Это может повлиять на вас, что вам больше всего нравится

PS

только что попробовал, так как несколько символов исходный файл работает на Ubuntu 18.04 x64

...