J'essaie de lier de manière conditionnelle dans. Est-ce possible dans xcode? Essayant fondamentalement d'intégrer le code spécifique de la bibliothèque dans ifdefs afin qu'il puisse être exclu au moment de la compilation en définissant des drapeaux.chemins de recherche de bibliothèque conditionnelle cible xcode
0
A
Répondre
1
Non, un C #define
n'est pas au même niveau que la liaison de bibliothèque.
Cependant, vous pouvez définir un C #define
(via le paramètre de compilation des macros préprocesseur) de la valeur d'un paramètre de construction personnalisé, comme BUILT_WITH_FOO
, et également définir votre build OTHER_LDFLAGS
paramètre basé sur cette version personnalisée mise aussi bien.
Par exemple:
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))
ci-dessus ne vous permettra d'ajuster seulement la valeur de la BUILT_WITH_FOO
build mise à choisir d'utiliser les macros préprocesseur et d'autres drapeaux Linker variantes dont les noms se terminent par un _
arrière, ou ceux dont les noms se terminent par un _foo
.
Mais cela résoudrait-il mon problème? Ou si j'ai lib.a dans mes chemins de recherche mais aucun code le référençant à la compilation son nit compilé du tout de toute façon? – drunknbass
Une bibliothèque statique n'est pas compilée, elle est liée. Le simple fait d'être dans les chemins de recherche ne suffit pas à le lier; il doit être spécifié soit dans la phase de construction Link Frameworks & Libraries dans votre cible, soit dans OTHER_LDFLAGS (comme je l'ai montré ci-dessus, c'est-à-dire -lfoo). Si ce n'est pas le cas, cela ne sera pas lié. –