Wie sollte meine CMake-Datei aussehen, um mein Programm mit der Boost-Bibliothek unter Ubuntu zu verknüpfen?
Die beim Ausführen angezeigten Fehler make
:
main.cpp:(.text+0x3b): undefined reference to `boost::program_options::options_description::m_default_line_length'
Die Hauptdatei ist wirklich einfach:
#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;
}
Das habe ich geschafft. Die einzigen Zeilen, die ich meinen CMake-Dateien hinzugefügt habe, waren:
target_link_libraries(
my_target_file
${Boost_PROGRAM_OPTIONS_LIBRARY}
)
target_link_libraries
nach den Zeilenadd_executable
undfind_package
, damit alle verknüpften Komponenten bekannt sind.Folgendes ist meine Konfiguration:
quelle
Wenn Sie die @ MOnsDaR-Antwort für die moderne CMake-Syntax mit importierten Zielen anpassen, wäre dies:
Beachten Sie, dass es nicht erforderlich ist, die Include-Verzeichnisse manuell anzugeben, da dies bereits über das importierte Ziel erledigt wird
Boost::program_options
.quelle
The FindBoost.cmake
Diese werden ursprünglich nur erstellt, wenn Ihre Boost-Version explizit aufgeführt ist. Irgendwann sollte dies verbessert werden, aber ich sehe immer noch Fehler mit CMake 3.10.2 und Boost 1.66 (neueste Kopien von Brew).Welche Boost-Bibliothek? Viele von ihnen sind reine Vorlagen und erfordern keine Verknüpfung.
Mit dem tatsächlich gezeigten konkreten Beispiel, das uns sagt, dass Sie Boost-Programmoptionen möchten (und noch mehr, dass Sie sich unter Ubuntu befinden), müssen Sie zwei Dinge tun:
libboost-program-options-dev
damit Sie darauf verlinken können.cmake
, gegen zu verlinkenlibboost_program_options
.Ich benutze meistens Makefiles, also hier ist die direkte Kommandozeilenverwendung:
Es scheint nicht viel zu tun.
Für CMake müssen Sie boost_program_options zur Liste der Bibliotheken hinzufügen, und IIRC erfolgt über
SET(liblist boost_program_options)
in IhremCMakeLists.txt
.quelle
Normalerweise gibt es zwei Möglichkeiten, den Standardinstallationspfad des Systems zu verwenden
/usr/lib/x86_64-linux-gnu/
:Wenn Sie Boost in einem lokalen Verzeichnis installieren oder die lokale Installation anstelle der Systeminstallation auswählen, können Sie dies folgendermaßen tun:
Beachten Sie,
/home/xy/boost_install/lib/
dass ich im obigen Verzeichnis Boost installiere:Wenn Sie an der Verwendung eines lokal installierten Boost interessiert sind, wird diese Frage angezeigt. Wie kann ich CMake dazu bringen, meine alternative Boost-Installation zu finden? .
quelle
Hier ist meine Einstellung:
quelle
find_package(Boost QUIET REQUIRED)
und verknüpfen Sie es mit Ihrem Ziel (DB32):target_link_libraries(DB32 PUBLIC Boost::headers)