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?
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
Regardez:
CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS
vous pouvez spécifier les options de linker dans target_link_libraries .
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"
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.