

Build avec CMake un programme utilisant des threads
source link: https://dev.to/baduit/build-avec-cmake-un-programme-utilisant-des-threads-19a7
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

La problématique
Lorsque vous utilisez la bibliothèque de support des threads de la bibliothèque standard, si vous utilisez gcc ou clang vous allez devoir linker votre programme avec la bibliothèque pthread. Pourquoi ? Car la libc++ et la libstdc++ (les implémentations de la bibliothèque standard de clang et de gcc) ont été linkées dynamiquement avec pthread. Du coup, dans votre ligne de compilation vous devez ajouter -lpthread
.
Si vous utilisez CMake comme système de build, la première idée qui vous vient est sûrement de regarder si vous n’êtes pas sur Windows, ou bien si vous utilisez clang ou gcc et de linker avec pthread dans ce cas là. Mais il existe une manière plus courte et plus portable de le faire !
La solution
Il suffit tout simplement d’appeler la fonction find_package pour chercher le package Threads, puis de linker votre cible avec la bibliothèque Threads::Threads.
find_package(Threads REQUIRED)
target_link_libraries(your_target PRIVATE Threads::Threads)
Enter fullscreen mode
Exit fullscreen mode
Voilà, c’est aussi simple que ça ! Pas besoin d’avoir de comportement différent en fonction du compilateur ou de la plateforme, et en plus c’est portable.
Exemple complet
Voici un exemple complet. On essaye donc de compiler ce fichier main.cpp :
#include <iostream>
#include <thread>
#include <chrono>
int main ()
{
using namespace std::chrono_literals;
std::cout << "Before sleep" << std::endl;
std::this_thread::sleep_for(2s);
std::cout << "After sleep." << std::endl;
}
Enter fullscreen mode
Exit fullscreen mode
Et voici le CMakeLists.txt correspondant :
cmake_minimum_required(VERSION 3.9)
project(ThreadExample VERSION 1.0.0 DESCRIPTION "A simple program using threads support library.")
find_package(Threads REQUIRED)
add_executable(my_target main.cpp)
target_link_libraries(api PRIVATE Threads::Threads)
Enter fullscreen mode
Exit fullscreen mode
Sources
Recommend
-
8
Des cartes collaboratives avec LivetitudeDes cartes collaboratives avec Livetitude Wed 23 November 2011Article original publié chez Makina Corpus Cela fait plusieurs semaines qu...
-
14
Mes premiers pas avec HerokuMes premiers pas avec Heroku Mon 10 October 2011J'ai pris le temps de tester la plateforme Heroku, qui fait pas mal de bruit en ce moment. L'idée est simple : le...
-
10
Avec Git rebase, vos arbres poussent droitAvec Git rebase, vos arbres poussent droit Fri 16 September 2011 Le problème Par défaut, un git pull est équivalent à git fetch et git merge. Les merge, c'est bien pour l...
-
9
Carte des vélos avec LeafletCarte des vélos avec Leaflet Mon 30 May 2011Article original publié chez Makina Corpus Les bookmarks, un peu comme les cahiers de recettes, c'est bie...
-
15
URL reverse en Javascript avec djangoURL reverse en Javascript avec django Fri 27 May 2011Article original publié chez Makina Corpus Un aspect fondamental de la philosophie djan...
-
7
Afficher des pictogrammes avec polymapsAfficher des pictogrammes avec polymaps Mon 28 February 2011En reprenant l'exemple de l'épis...
-
14
Afficher les données de Paris OpenData avec polymapsAfficher les données de Paris OpenData avec polymaps Thu 24 February 2011En ouvrant l'accès à un catalogue de données diverses (Équipements, bâti, arbres d'alignement, arrêtés munic...
-
16
Authentification en 2 étapes sous Linux (SSH/PAM) avec Google Authenticator ssh pam...
-
10
-
11
Comment peut...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK