J'ai une exécutable construite à partir de plusieurs fichiers d'objets et liés à plusieurs bibliothèques statiques et partagées. Je tiens à spécifier -WL, -WL, -WL, option de liaison d'archives à l'une des bibliothèques liées.
Par exemple, à partir de cette commande: p> Je veux obtenir cette commande : P> set_target_properties(myExec PROPERTIES LINK_FLAGS "-Wl,-whole-archive")
3 Réponses :
Ce fil lier des bibliothèques statiques dans les libs partagés? a une méthode pour cela.
Je pense qu'il est important de noter que cela fait pas i> fonctionner si mon_particult_lib a d'autres libs statiques comme dépendances ajoutées via des appels tels que: cible_link_libraries (my_partoire_lib ... my_other_partoire_lib). Il ne conserve pas le --whaole-Archive et - non-archive dans la bonne position.
TARGET_LINK_LIBRARIES(myTarget -Wl,--whole-archive myLib -Wl,--no-whole-archive) Simply replace myTarget and myLibOryginal post: https://stackoverflow.com/a/37564428/1052261
Comme @Richvonlehe souligne, la solution proposée peut ne pas fonctionner si vous avez plusieurs bibliothèques. CUMAKE Treats Malheureusement, vous aussi em> peut ne pas être en mesure de tout emballer dans des guillemets. Si vous faites même cela fait défaut. Cmake rend difficile d'avoir des bibliothèques statiques vides et ne vous permet pas de mettre en-têtes publics sur des bibliothèques d'interface (encore?). P> -WL, - Archive entier My_Particulôt_lib -WL, - Non-Toute Archive Code> comme 3 bibliothèques distinctes, et ne fait aucune garantie sur la commande. Dans mon cas particulier, j'ai constaté que j'ai fini par avoir un groupe d'autres archives qui sont incluses entre le
-WL, - une archive globale code> et
-WL, - non-total-archive CODE> Drapeaux, entraînant des définitions de symboles en double.
-WL, - Archive entière, $
add_library(my_lib INTERFACE)
add_library(my_lib_part_1 STATIC
foo.cpp
)
add_library(my_lib_part_2 STATIC
bar.cpp
)
target_link_libraries(my_lib
INTERFACE
my_lib_part_1
# It is very important this is in quotes so CMake treats it as a single flag
"-Wl,--whole-archive $<TARGET_FILE:my_lib_part_2> -Wl,--no-whole-archive"
)
set_target_properties(my_lib_part_1 PROPERTIES
PUBLIC_HEADER "my_public_header.hpp"
)
set_target_properties(my_lib_part_2 PROPERTIES
POSITION_INDEPENDENT_CODE ON
)