Статическая библиотека должна ссылаться на файл конфигурации проекта - PullRequest
1 голос
/ 28 февраля 2012

Я создаю статическую библиотеку, которая ссылается на некоторые параметры конфигурации #define в файле конфигурации внешнего заголовочного файла. H

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

Как получить статическую библиотеку для ссылки на внешний файл?

1 Ответ

1 голос
/ 28 февраля 2012

Заголовочный файл, содержащий директивы препроцессора #define, может влиять только на компиляцию кода.Поскольку статическая библиотека уже скомпилирована, директивы препроцессора на нее не влияют.

Вы должны использовать конструкции времени выполнения, например, if, чтобы изменить поведение статической библиотеки.

Если ваш кодбыло:

// configuration.h
#define USE_FLUX_CONDENSER 1

// static library
void advanceTime() {
    #if USE_FLUX_CONDENSER
        chargeFluxCondenser()
    #endif
}

Это станет:

// configuration.h
extern BOOL g_useFluxCondenser;

// static library
BOOL g_useFluxCondenser;
void advanceTime() {
    if (g_useFluxCondenser) {
        chargeFluxCondenser()
    }
}

И где-то в вашем коде инициализации вы установите g_useFluxCondenser = YES.

...