Seperti apa tampilan file CMake saya untuk menautkan program saya dengan pustaka Boost di Ubuntu?
Kesalahan yang ditampilkan selama berjalan make
:
main.cpp:(.text+0x3b): undefined reference to `boost::program_options::options_description::m_default_line_length'
File utamanya sangat sederhana:
#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;
}
Saya sudah berhasil melakukan itu. Satu-satunya baris yang saya tambahkan ke file CMake saya adalah:
target_link_libraries(
my_target_file
${Boost_PROGRAM_OPTIONS_LIBRARY}
)
target_link_libraries
setelah ituadd_executable
danfind_package
garis, sehingga semua komponen terkait dikenal.Berikut ini adalah konfigurasi saya:
sumber
Mengadaptasi jawaban @MOnsDaR untuk sintaks CMake modern dengan target yang diimpor, ini akan menjadi:
Perhatikan bahwa tidak perlu menentukan direktori include secara manual, karena sudah ditangani melalui target yang diimpor
Boost::program_options
.sumber
The FindBoost.cmake
awalnya membuat ini hanya jika secara eksplisit mencantumkan versi Peningkatan Anda. Pada titik tertentu ini seharusnya diperbaiki, tetapi saya masih melihat kegagalan dengan CMake 3.10.2 dan Boost 1.66 (salinan terbaru dari brew).Perpustakaan Boost yang mana? Banyak di antaranya adalah templat murni dan tidak perlu ditautkan.
Sekarang dengan contoh konkret yang benar-benar ditunjukkan yang memberi tahu kami bahwa Anda menginginkan opsi program Boost (dan bahkan memberi tahu kami bahwa Anda menggunakan Ubuntu), Anda perlu melakukan dua hal:
libboost-program-options-dev
agar Anda dapat menautkannya.cmake
untuk menautkanlibboost_program_options
.Saya kebanyakan menggunakan Makefiles jadi berikut adalah penggunaan baris perintah langsung:
Sepertinya tidak banyak membantu.
Untuk CMake, Anda perlu menambahkan boost_program_options ke daftar pustaka, dan IIRC ini dilakukan melalui
SET(liblist boost_program_options)
diCMakeLists.txt
.sumber
Dua cara, menggunakan jalur penginstalan default sistem, biasanya
/usr/lib/x86_64-linux-gnu/
:Jika Anda menginstal Boost di direktori lokal atau memilih penginstalan lokal daripada penginstalan sistem, Anda dapat melakukannya dengan ini:
Perhatikan dir di atas
/home/xy/boost_install/lib/
adalah tempat saya menginstal Boost:Jika Anda tertarik dengan cara menggunakan Boost yang terinstal secara lokal, Anda dapat melihat pertanyaan ini Bagaimana saya bisa mendapatkan CMake untuk menemukan instalasi Boost alternatif saya? .
sumber
Ini pendapat saya:
sumber
find_package(Boost QUIET REQUIRED)
dan tautan ke target Anda (DB32):target_link_libraries(DB32 PUBLIC Boost::headers)