Я пытаюсь конкретизировать ссылку в .a статические библиотеки по определению. Возможно ли это в xcode? В основном пытается обернуть конкретный код библиотеки в ifdefs, чтобы его можно было исключить во время компиляции, установив флаги.целевые условные пути поиска библиотек xcode
0
A
ответ
1
Нет, a C #define
не соответствует уровню связи с библиотекой.
Однако, вы можете установить C #define
(через настройку сборки Препроцессора Macros) от значения настройки пользовательской сборки, как BUILT_WITH_FOO
, а также установить OTHER_LDFLAGS
сборки настройки на основе этого пользовательской настройки, а также строить.
Например:
BUILT_WITH_FOO = foo
GCC_PREPROCESSOR_DEFINITIONS_ = USING_FOO=0
GCC_PREPROCESSOR_DEFINITIONS_foo = USING_FOO=1
GCC_PREPROCESSOR_DEFINITIONS = $(GCC_PREPROCESSOR_DEFINITIONS_$(BUILT_WITH_FOO))
OTHER_LDFLAGS_ = -lsomething
OTHER_LDFLAGS_foo = -lsomething -lfoo
OTHER_LDFLAGS = $(OTHER_LDFLAGS_$(BUILT_WITH_FOO))
выше позволит вам регулировать только значение параметра BUILT_WITH_FOO
сборки, чтобы выбрать, следует ли использовать макросы препроцессора и другие флаги компоновщика варианты, чьи имена заканчиваются завершающая _
, или те, чьи имена заканчиваются завершающим _foo
.
Но это решит мою проблему? Или, если у меня есть lib.a в моих путях поиска, но нет кода, ссылающегося на него во время компиляции, его нит, скомпилированный вообще? – drunknbass
Статическая библиотека не скомпилирована, она связана. Просто быть в пути поиска недостаточно, чтобы заставить его быть связанным; он должен быть указан либо в фазе построения ссылок и библиотек ссылок в вашей целевой, либо в OTHER_LDFLAGS (как показано выше, то есть -lfoo). Если он ни в одном из них, он не будет связан. –