À quoi mon fichier CMake doit-il ressembler pour lier mon programme à la bibliothèque Boost sous Ubuntu?
Les erreurs affichées lors de l'exécution make
:
main.cpp:(.text+0x3b): undefined reference to `boost::program_options::options_description::m_default_line_length'
Le fichier principal est vraiment simple:
#include <boost/program_options/options_description.hpp>
#include <boost/program_options/option.hpp>
using namespace std;
#include <iostream>
namespace po = boost::program_options;
int main(int argc, char** argv) {
po::options_description desc("Allowed options");
desc.add_options()
("help", "produce help message")
;
return 0;
}
J'ai réussi à faire ça. Les seules lignes que j'ai ajoutées à mes fichiers CMake étaient:
target_link_libraries(
my_target_file
${Boost_PROGRAM_OPTIONS_LIBRARY}
)
target_link_libraries
après les lignesadd_executable
etfind_package
, afin que tous les composants liés soient connus.Voici ma configuration:
la source
En adaptant la réponse @MOnsDaR à la syntaxe CMake moderne avec des cibles importées, ce serait:
Notez qu'il n'est pas nécessaire de spécifier manuellement les répertoires d'inclusion, car cela est déjà pris en charge via la cible importée
Boost::program_options
.la source
The FindBoost.cmake
ne les construit à l'origine que s'il répertorie explicitement votre version Boost. À un moment donné, cela était censé être amélioré, mais je vois toujours des échecs avec CMake 3.10.2 et Boost 1.66 (les dernières copies de brew).Quelle bibliothèque Boost? Beaucoup d'entre eux sont de purs modèles et ne nécessitent pas de liaison.
Maintenant, avec cet exemple concret réellement montré qui nous indique que vous voulez des options de programme Boost (et encore plus nous dit que vous êtes sur Ubuntu), vous devez faire deux choses:
libboost-program-options-dev
manière à pouvoir établir un lien avec celui-ci.cmake
à lier contrelibboost_program_options
.J'utilise principalement Makefiles, voici donc l'utilisation directe de la ligne de commande:
Cela ne fait pas grand-chose semble-t-il.
Pour CMake, vous devez ajouter boost_program_options à la liste des bibliothèques, et IIRC cela se fait via
SET(liblist boost_program_options)
dans votre fichierCMakeLists.txt
.la source
Deux façons, en utilisant le chemin d'installation par défaut du système, généralement
/usr/lib/x86_64-linux-gnu/
:Si vous installez Boost dans un répertoire local ou choisissez l'installation locale au lieu de l'installation du système, vous pouvez le faire de la manière suivante:
Notez que le répertoire ci-dessus
/home/xy/boost_install/lib/
est l'endroit où j'installe Boost:Si vous souhaitez savoir comment utiliser un Boost installé localement, vous pouvez voir cette question Comment puis-je demander à CMake de trouver mon autre installation Boost? .
la source
Voici ma prise:
la source
find_package(Boost QUIET REQUIRED)
et lien vers votre cible (DB32):target_link_libraries(DB32 PUBLIC Boost::headers)