2012-11-29 3 views
2

J'essaye de faire une bibliothèque partagée liée avec une version statique de librt. Actuellement, je fais ceci:Force cmake à lier la bibliothèque partagée avec la bibliothèque statique sans mentionner une cible spécifique

CMAKE_MINIMUM_REQUIRED(VERSION 2.6) 
ADD_LIBRARY(memtrace SHARED memtrace.c) 
ADD_LIBRARY(lib_real_time STATIC IMPORTED) 
SET_TARGET_PROPERTIES(lib_real_time PROPERTIES IMPORTED_LOCATION /usr/lib/x86_64-linux-gnu/librt.a) 
TARGET_LINK_LIBRARIES(memtrace lib_real_time) 

Mais je ne veux pas spécifier le chemin comme celui-ci. Puisque librt est toujours dans les chemins standards, je préférerais que cmake le trouve. Comme dans gcc, je ne spécifierais que -lrt. Lorsque je tente de le faire en utilisant ce fichier CMake:

CMAKE_MINIMUM_REQUIRED(VERSION 2.6) 
ADD_LIBRARY(memtrace SHARED memtrace.c) 
TARGET_LINK_LIBRARIES(memtrace rt) 

Il memtrace lien avec la version dynamique de librt qui est pas ce que je veux !!

Comment puis-je lier avec la version statique de librt sans mentionner son chemin complet?

+1

'TARGET_LINK_LIBRARIES (memtrace rt.a)'? – arrowd

+0

Merci beaucoup! Faites-en une réponse si vous voulez le crédit! – p00ya00

Répondre

4

Pour créer un lien avec la version statique de la bibliothèque, ajoutez simplement ".a" l'extension de son nom:

TARGET_LINK_LIBRARIES(memtrace rt.a) 
+6

Ne faites pas cela, il existe des plates-formes où les bibliothèques statiques n'ont pas l'extension '.a'. Windows, par exemple :-) –

+2

@ user465139 comment pouvons-nous lier sélectivement à partagé ou statique? – quimnuss

Questions connexes