134 votes

Comment lier un programme C++ avec Boost en utilisant CMake

A quoi doit ressembler mon fichier CMake 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 très 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 à le faire. Les seules lignes que j'ai ajoutées à mes fichiers CMake sont les suivantes :

target_link_libraries(
my_target_file
${Boost_PROGRAM_OPTIONS_LIBRARY}
)

1voto

Dirk Eddelbuettel Points 134700

Quelle bibliothèque Boost ? Beaucoup d'entre elles sont des modèles purs et ne nécessitent pas de liaison.

Maintenant, avec cet exemple concret qui nous dit que vous voulez les options du programme Boost (et encore plus que vous êtes sur Ubuntu), vous devez faire deux choses :

  1. Installer libboost-program-options-dev afin que vous puissiez vous y référer.
  2. Raconter cmake à lier contre libboost_program_options .

J'utilise principalement Makefiles, voici donc l'utilisation directe en ligne de commande :

$ g++ boost_program_options_ex1.cpp -o bpo_ex1 -lboost_program_options
$ ./bpo_ex1
$ ./bpo_ex1 -h
$ ./bpo_ex1 --help
$ ./bpo_ex1 -help
$

Il ne fait pas grand-chose, semble-t-il.

Pour CMake, il faut ajouter boost_program_options à la liste des bibliothèques, et cela se fait via SET(liblist boost_program_options) dans votre CMakeLists.txt .

16 votes

Votre conseil sur CMake est erroné (voir la réponse acceptée), et votre conseil sur la ligne de commande n'est pas très utile puisque la question portait sur CMake.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X