CMake: comment configurer les LDFLAGS dans les CMakeLists.txt?

j'ai placé les CFLAGS dans CMake par CMAKE_C_FLAGS. Est-ce quelque chose comme ça pour mettre des LDFLAGS?

53
demandé sur RzR 2011-05-21 00:46:32

5 réponses

cela dépend un peu de ce que vous voulez:

A) Si vous voulez spécifier les bibliothèques vers lesquelles vous devez établir un lien, vous pouvez utiliser find_library pour trouver libs, puis utiliser link_directories et target_link_libraries pour.

bien sûr, il vaut souvent l'effort d'écrire un bon find_package script, qui ajoute bien" importés "bibliothèques avec add_library( YourLib IMPORTÉS ) avec des emplacements appropriés, et de plate-forme/build spécifique de pré - et de suffixes. Vous pouvez alors simplement vous référer à 'YourLib' et utiliser target_link_libraries.

B) Si vous souhaitez spécifier des indicateurs de liens particuliers, par exemple '-mthreads' ou '- Wl,--export-tous les symboles' avec MinGW-GCC, vous pouvez utiliser CMAKE_EXE_LINKER_FLAGS . Il existe également deux options similaires mais non documentées pour les modules, les bibliothèques partagées ou statiques:

CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS
45
répondu André 2016-08-11 22:34:50

Regardez:

CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS
19
répondu tibur 2017-02-10 18:37:21

vous pouvez spécifier les options de linker dans target_link_libraries .

5
répondu Simon 2013-03-22 05:48:19

Pour se lier à des bibliothèques de voir André réponse .

pour les drapeaux de linker - les 4 variables de CMake suivantes:

CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS

peut être facilement manipulé pour différentes configurations (debug, release...) avec la macro UCM UCM 151940920"

3
répondu onqtam 2017-05-23 12:34:44

si vous voulez ajouter un drapeau à chaque lien , par exemple -fsanitize=address alors je ne recommande pas d'utiliser CMAKE_*_LINKER_FLAGS . Même avec tous ces paramètres, il n'utilise toujours pas le drapeau lors de la connexion D'un framework sur OSX, et peut-être dans d'autres situations. Utilisez plutôt link_libraries() :

add_compile_options("-fsanitize=address")
link_libraries("-fsanitize=address")

ça marche pour tout.

3
répondu Timmmm 2017-08-04 09:48:49