web-dev-qa-db-fra.com

Comment définir les LDFLAGS dans CMakeLists.txt?

Je règle les CFLAGS dans CMake par CMAKE_C_FLAGS. Est-ce que quelque chose comme ceci définit LDFLAGS?

60
paykoob

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

A) Si vous souhaitez spécifier les bibliothèques vers lesquelles vous souhaitez créer un lien, vous pouvez utiliser find_library pour rechercher des bibliothèques, puis utiliser link_directories et target_link_libraries .

Bien sûr, cela vaut souvent la peine d’écrire un bon script find_package , qui ajoute joliment les bibliothèques "importées" avec add_library (YourLib IMPORTED) avec les emplacements corrects et la plate-forme/construire des pré et suffixes spécifiques. Vous pouvez alors simplement vous référer à 'YourLib' et utiliser target_link_libraries.

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

CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS
51
André

Regarder:

CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS
20
tibur

Si vous souhaitez ajouter un drapeau au lien every, par ex. -fsanitize=address Alors je ne recommanderais pas d'utiliser CMAKE_*_LINKER_FLAGS. Même avec tous les ensembles, le drapeau n’est toujours pas utilisé lors de la liaison d’un framework sur OSX, et peut-être dans d’autres situations. À la place, utilisez link_libraries():

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

Cela fonctionne pour tout.

5
Timmmm

Vous pouvez spécifier les indicateurs de l'éditeur de liens dans target_link_libraries .

5
Simon

Pour lier des bibliothèques, voir réponse d'André .

Pour les drapeaux de l'éditeur de liens - les 4 variables 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 configs (debug, release ...) avec le cm_add_linker_flags macro de cm

4
onqtam