2016-09-23 1 views
1

J'ai un code qui est ramifié par #define directive, par exemple:lien conditionnellement à la bibliothèque partagée sur une définition dans qmake

#ifdef USE_LIB_CRYPTO 
#include <openssl/evp.h> 
#else 
#include <cryptopp/pwdbased.h> 
#include <cryptopp/sha.h> 
#endif 

Selon est défini USE_LIB_CRYPTO ou non, je dois ajouter

LIBS += -lcrypto 

ou

LIBS += -lcryptopp 

Comment puis-je faire cela? Par exemple, cela devrait être contrôlé par:

qmake ./ DEFINES + = « USE_LIB_CRYPTO »

donc je dois vérifier en quelque sorte est passé à define qmake et un lien vers la bibliothèque j'ai besoin.

+0

Toujours ajouter la dépendance lib. Si ce n'est pas nécessaire, linker fait le travail pour vous. – LPs

+0

@LPs si je lie à une bibliothèque qui n'existe pas sur la machine de construction, j'obtiens '/ usr/bin/ld: ne trouve pas -lsdfjiijasdf' donc je pense que cela devrait être contrôlé. –

+0

Eh bien, il est évidemment nécessaire d'exister sur votre SDK. – LPs

Répondre

1

Vous pouvez utiliser la fonction de test contains du qmake.

contains (DEFINES, USE_LIB_CRYPTO){ 
    LIBS += -lcrypto 
} else { 
    LIBS += -lcryptopp 
}