• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

BOOST w CLion na ubuntu 20.04

Object Storage Arubacloud
0 głosów
581 wizyt
pytanie zadane 7 lipca 2021 w C i C++ przez MOON0016 Obywatel (1,470 p.)

Witam!

Otóż chciałem programować na moim Ubuntu 20.04 w c++ w środowisku CLion z użyciem boosta. Jednak otrzymuje za każdym razem błąd mówiący, że nie można znaleźć boosta. Mój cmake wygląda tak:

cmake_minimum_required(VERSION 3.19)
project(projekt_testowy_1)

set(CMAKE_CXX_STANDARD 14)
set(BOOST_ROOT "/home/Programowanie/boost_1_76_0")

find_package(Boost 1.76.0)

if(NOT Boost_FOUND)
    message(FATAL_ERROR "Could not find boost!")
endif()

add_executable(projekt_testowy_1 main.cpp)

Otrzymuje komunikat:

-- Could NOT find Boost: Found unsuitable version "1.71.0", but required is at least "1.76.0" (found /usr/include, )
CMake Error at CMakeLists.txt:10 (message):
  Could not find boost!

Gdy zmieniam na find_package(Boost  1.71.0) to znów otrzymuje masę komunikatów "undefined reference to"

Ograniczenie znaków w poście nie pozwala mi wkleić logów z cmake

Boosta mam wypakowanego w folderze programowanie aby była do niego prostsza ścieżka (chce narazie aby w ogóle zaczęło to działać). Dodam jeszcze, że nie jestem jakoś biegły z linuxem oraz cmakami ponieważ dotychczas programowałem w codeblocks i qt gdzie tylko klikałem kompiluj i tyle. 

1 odpowiedź

+1 głos
odpowiedź 7 lipca 2021 przez adrian17 Ekspert (344,860 p.)
wybrane 11 lipca 2021 przez MOON0016
 
Najlepsza

Gdy zmieniam na find_package(Boost  1.71.0) to znów otrzymuje masę komunikatów "undefined reference to"

No tak, bo samo find_package tylko znajduje boosta, ale nie dodaje go do builda. Brakuje target_link_libraries, przykład z dokumentacji:

find_package(Boost 1.56 REQUIRED COMPONENTS
             date_time filesystem iostreams)
add_executable(foo foo.cc)
target_link_libraries(foo Boost::date_time Boost::filesystem
                          Boost::iostreams)

https://cmake.org/cmake/help/latest/module/FindBoost.html#examples

komentarz 7 lipca 2021 przez MOON0016 Obywatel (1,470 p.)
Dzięki za odpowiedź. Tak jak pisałem jestem trochę zielony więc wkleiłem ten kod do cmake zmieniając wersje na 1.76 (tak jak podpisany jest folder). Wtedy otrzymuje komunikat::
  Could NOT find Boost: Found unsuitable version "1.71.0", but required is at
  least "1.76" (found /usr/include, found components: date_time filesystem
  iostreams regex)

Gdy zmieniam na 1.71, czyli taką jaką niby znalazło to mam z kolei taki błąd:

CMake Error at CMakeLists.txt:9 (add_executable):
  Cannot find source file:

    foo.cc

  Tried extensions .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm
  .hpp .hxx .in .txx .f .F .for .f77 .f90 .f95 .f03 .ispc

CMake Error at CMakeLists.txt:9 (add_executable):
  No SOURCES given to target: foo
komentarz 7 lipca 2021 przez adrian17 Ekspert (344,860 p.)

Cannot find source file:
    foo.cc

No... bo Twój plik z mainem nie nazywa się foo.cc, nie? :)

A na boku:

set(BOOST_ROOT "/home/Programowanie/boost_1_76_0")

Czemu nie normalnie boost z repozytorium? (w sensie, i tak jest zainstalowany z tego co widzę, ale w takim razie po co ten pobrałeś ręcznie)

komentarz 7 lipca 2021 przez MOON0016 Obywatel (1,470 p.)

Sorry, na ślepo wkleiłem. Teraz mam takie:

find_package(Boost 1.71 REQUIRED COMPONENTS
        date_time filesystem iostreams)
add_executable(projekt_testowy_1 main.cpp)
target_link_libraries(projekt_testowy_1 Boost::date_time Boost::filesystem
        Boost::iostreams)

if(NOT Boost_FOUND)
    message(FATAL_ERROR "Could not find boost!")
endif()

add_executable(projekt_testowy_1 main.cpp)

CMake Error at CMakeLists.txt:17 (add_executable):
  add_executable cannot create target "projekt_testowy_1" because another
  target with the same name already exists.  The existing target is an
  executable created in source directory
  "/home/moon/CLionProjects/projekt_testowy_1".  See documentation for policy
  CMP0002 for more details.

 

Ręcznie pobrałem dlatego że najpierw próbowałem podpinać te biblioteki pod VS Code i tam nie pokazywało mi nic, że wykrywa, więc pobrałem też ręcznie. Generalnie to nie ukrywam, że o ile zaprogramować coś potrafię to do takich rzeczy nie mam głowy i jestem zielony ;)

komentarz 7 lipca 2021 przez adrian17 Ekspert (344,860 p.)

add_executable cannot create target "projekt_testowy_1" because another
  target with the same name already exists

Mówi ci dosłownie co masz źle - zdefiniowałeś dwukrotnie `projekt_testowy_1`.

komentarz 7 lipca 2021 przez MOON0016 Obywatel (1,470 p.)
Sorry za moją niekompetencję. Po usunięciu jednej ze zduplikowanych linijek jest tak:

CMake Error at CMakeLists.txt:10 (target_link_libraries):
  Cannot specify link libraries for target "projekt_testowy_1" which is not
  built by this project.
komentarz 7 lipca 2021 przez adrian17 Ekspert (344,860 p.)
(...i upewnij się że deklarujesz projekt_testowy_1 przed użyciem go)
komentarz 7 lipca 2021 przez MOON0016 Obywatel (1,470 p.)
cmake_minimum_required(VERSION 3.19)
project(projekt_testowy_1)

set(CMAKE_CXX_STANDARD 14)
set(BOOST_ROOT "/usr/include/")

find_package(Boost 1.71 REQUIRED COMPONENTS
        date_time filesystem iostreams)

target_link_libraries(projekt_testowy_1 Boost::date_time Boost::filesystem
        Boost::iostreams)

if(NOT Boost_FOUND)
    message(FATAL_ERROR "Could not find boost!")
endif()

add_executable(projekt_testowy_1 main.cpp)

Nie znam się na tym. Które to jest deklaracja? Użycie to add_executable?

komentarz 7 lipca 2021 przez adrian17 Ekspert (344,860 p.)

Nie znam się na tym.

To nie wymówka żeby próbować na ślepo, tylko powód żeby o tym poczytać :)

Użycie to add_executable?

Nie, właśnie add_executable deklaruje nowy target.

set(BOOST_ROOT "/usr/include/")

A to nie jest potrzebne.

komentarz 7 lipca 2021 przez MOON0016 Obywatel (1,470 p.)

Mam jeszcze parę pytań. Przeczytałem, że za pomocą set tworzy się zmienne. W takim razie czy potrzebuję tej linijki?

set(CMAKE_CXX_STANDARD 14)

Teraz mam najpierw deklarację a potem dołączenie za pomocą tareget_link_libraries gdzie jako pierwsze daje nazwę pliku a potem ścieżki dostępu do bibliotek. Czyli jeśli mój przykładowy program używa boost/locale.hpp to jako ścieżkę wystarczy, że wpiszę boost/locale.hpp czy źle to rozumiem?

komentarz 7 lipca 2021 przez adrian17 Ekspert (344,860 p.)

W takim razie czy potrzebuję tej linijki?

Jak chcesz żeby w kompilatorze włączył c++14, to tak. Jest jeszcze nowszy odpowiednik:

target_compile_features(projekt_testowy_1 PUBLIC cxx_std_14)

Czyli jeśli mój przykładowy program używa boost/locale.hpp to jako ścieżkę wystarczy, że wpiszę boost/locale.hpp

Nie, nie musisz żadnych boostowych ścieżek wpisywać w CMakeLists.txt. `#include <boost/locale.hpp>` powinno tak po prostu zadziałać. Wystarczy że będzie jak za dokumentacją

add_executable(projekt_testowy_1 main.cpp)
target_include_directories(projekt_testowy_1 PUBLIC ${Boost_INCLUDE_DIRS})
target_link_libraries(projekt_testowy_1 Boost::date_time Boost::filesystem Boost::iostreams)

 

komentarz 8 lipca 2021 przez j23 Mędrzec (194,920 p.)

Boost::date_time Boost::filesystem Boost::iostreams

Skoro podaje komponenty w find_package, to powinno wystarczyć samo ${Boost_LIBRARIES}.

komentarz 8 lipca 2021 przez adrian17 Ekspert (344,860 p.)
AFAIK tutaj zadziała, tak; ale w ogólności to nie jest dobre, bo LIBRARIES ma po prostu listę bibliotek .so; w idealnym przypadku jak przekażesz target do target_link_libraries, to cmake ogarnie pod spodem wszystko, w tym include'y (więc nawet target_include_directories nie trzeba).
komentarz 9 lipca 2021 przez MOON0016 Obywatel (1,470 p.)
Gdy spróbowałem wymienić tę linijkę z set na tę nowszą wersję

target_compile_features(projekt_testowy_1 PUBLIC cxx_std_14)

to wyskakuje mi błąd:

  Cannot specify compile features for target "projekt_testowy_1" which is not
  built by this project.

Natomiast dodanie tych trzech linijek wysłanych powyżej powoduje "undefined references"
komentarz 9 lipca 2021 przez adrian17 Ekspert (344,860 p.)

Za dużo mieszasz. Jak masz błędy, pokaż dla jakiego kodu dostajesz błędy i jakie konkretnie błędy.

to wyskakuje mi błąd:

  Cannot specify compile features for target "projekt_testowy_1" which is not
  built by this project.

Pewnie znowu odniosłeś się do `projekt_testowy_1` przed jego stworzeniem.

komentarz 9 lipca 2021 przez MOON0016 Obywatel (1,470 p.)

Teraz używam takiego cmake:

cmake_minimum_required(VERSION 3.19)
project(projekt_testowy_1)

find_package(Boost 1.71 REQUIRED COMPONENTS
        date_time filesystem iostreams)

add_executable(projekt_testowy_1 main.cpp)
target_compile_features(projekt_testowy_1 PUBLIC cxx_std_14)
target_include_directories(projekt_testowy_1 PUBLIC ${Boost_INCLUDE_DIRS})
target_link_libraries(projekt_testowy_1 Boost::date_time Boost::filesystem Boost::iostreams)


if(NOT Boost_FOUND)
    message(FATAL_ERROR "Could not find boost!")
endif()

Aktualny błąd to masa "undefined references"

komentarz 9 lipca 2021 przez j23 Mędrzec (194,920 p.)

Daj trochę tych udefined references. Pewnie jakiejś biblioteki nie załączasz.

komentarz 9 lipca 2021 przez adrian17 Ekspert (344,860 p.)
Dlatego poprosiłem "jakie konkretnie błędy" :)

Najlepiej wrzucaj cały log budowania.
komentarz 9 lipca 2021 przez MOON0016 Obywatel (1,470 p.)

Więc przykładowy program, który chce skompilować wygląda tak:

#include <boost/locale.hpp>
#include <iostream>

#include <ctime>

int main() {
    using namespace boost::locale;
    using namespace std;
    generator gen;
    locale loc = gen("");
    // Create system default locale

    locale::global(loc);
    // Make it system global

    cout.imbue(loc);
    // Set as default locale for output

    cout << format("Today {1,date} at {1,time} we had run our first localization example") % time(0)
         << endl;

    cout << "This is how we show numbers in this locale " << as::number << 103.34 << endl;
    cout << "This is how we show currency in this locale " << as::currency << 103.34 << endl;
    cout << "This is typical date in the locale " << as::date << std::time(0) << endl;
    cout << "This is typical time in the locale " << as::time << std::time(0) << endl;
    cout << "This is upper case " << to_upper("Hello World!") << endl;
    cout << "This is lower case " << to_lower("Hello World!") << endl;
    cout << "This is title case " << to_title("Hello World!") << endl;
    cout << "This is fold case " << fold_case("Hello World!") << endl;

    return 0;
}

A błędy:

/home/moon/Programowanie/CLion-2021.1.2/clion-2021.1.2/bin/cmake/linux/bin/cmake --build /home/moon/Programowanie/CLionProjects/projekt_testowy_1/cmake-build-debug --target projekt_testowy_1 -- -j 6
Scanning dependencies of target projekt_testowy_1
[ 50%] Building CXX object CMakeFiles/projekt_testowy_1.dir/main.cpp.o
[100%] Linking CXX executable projekt_testowy_1
/usr/bin/ld: CMakeFiles/projekt_testowy_1.dir/main.cpp.o: in function `main':
/home/moon/Programowanie/CLionProjects/projekt_testowy_1/main.cpp:9: undefined reference to `boost::locale::generator::generator()'
/usr/bin/ld: /home/moon/Programowanie/CLionProjects/projekt_testowy_1/main.cpp:9: undefined reference to `boost::locale::generator::~generator()'
/usr/bin/ld: /home/moon/Programowanie/CLionProjects/projekt_testowy_1/main.cpp:9: undefined reference to `boost::locale::generator::~generator()'
/usr/bin/ld: CMakeFiles/projekt_testowy_1.dir/main.cpp.o: in function `boost::locale::as::number(std::ios_base&)':
/usr/include/boost/locale/formatting.hpp:294: undefined reference to `boost::locale::ios_info::get(std::ios_base&)'
/usr/bin/ld: /usr/include/boost/locale/formatting.hpp:294: undefined reference to `boost::locale::ios_info::display_flags(unsigned long)'
/usr/bin/ld: CMakeFiles/projekt_testowy_1.dir/main.cpp.o: in function `boost::locale::as::currency(std::ios_base&)':
/usr/include/boost/locale/formatting.hpp:303: undefined reference to `boost::locale::ios_info::get(std::ios_base&)'
/usr/bin/ld: /usr/include/boost/locale/formatting.hpp:303: undefined reference to `boost::locale::ios_info::display_flags(unsigned long)'
/usr/bin/ld: CMakeFiles/projekt_testowy_1.dir/main.cpp.o: in function `boost::locale::as::date(std::ios_base&)':
/usr/include/boost/locale/formatting.hpp:321: undefined reference to `boost::locale::ios_info::get(std::ios_base&)'
/usr/bin/ld: /usr/include/boost/locale/formatting.hpp:321: undefined reference to `boost::locale::ios_info::display_flags(unsigned long)'
/usr/bin/ld: CMakeFiles/projekt_testowy_1.dir/main.cpp.o: in function `boost::locale::as::time(std::ios_base&)':
/usr/include/boost/locale/formatting.hpp:330: undefined reference to `boost::locale::ios_info::get(std::ios_base&)'
/usr/bin/ld: /usr/include/boost/locale/formatting.hpp:330: undefined reference to `boost::locale::ios_info::display_flags(unsigned long)'
/usr/bin/ld: CMakeFiles/projekt_testowy_1.dir/main.cpp.o: in function `boost::locale::as::strftime(std::ios_base&)':
/usr/include/boost/locale/formatting.hpp:349: undefined reference to `boost::locale::ios_info::get(std::ios_base&)'
/usr/bin/ld: /usr/include/boost/locale/formatting.hpp:349: undefined reference to `boost::locale::ios_info::display_flags(unsigned long)'
/usr/bin/ld: CMakeFiles/projekt_testowy_1.dir/main.cpp.o: in function `boost::locale::generator::operator()(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const':
/usr/include/boost/locale/generator.hpp:203: undefined reference to `boost::locale::generator::generate(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
/usr/bin/ld: CMakeFiles/projekt_testowy_1.dir/main.cpp.o: in function `boost::locale::basic_format<char>::write(std::ostream&) const':
/usr/include/boost/locale/format.hpp:266: undefined reference to `boost::locale::ios_info::get(std::ios_base&)'
/usr/bin/ld: /usr/include/boost/locale/format.hpp:266: undefined reference to `boost::locale::ios_info::domain_id() const'
/usr/bin/ld: CMakeFiles/projekt_testowy_1.dir/main.cpp.o: in function `boost::locale::converter<char> const& std::use_facet<boost::locale::converter<char> >(std::locale const&)':
/usr/include/c++/9/bits/locale_classes.tcc:134: undefined reference to `boost::locale::converter<char>::id'
/usr/bin/ld: CMakeFiles/projekt_testowy_1.dir/main.cpp.o: in function `boost::locale::basic_format<char>::format_output(std::ostream&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const':
/usr/include/boost/locale/format.hpp:335: undefined reference to `boost::locale::details::format_parser::format_parser(std::ios_base&, void*, void (*)(void*, std::locale const&))'
/usr/bin/ld: /usr/include/boost/locale/format.hpp:385: undefined reference to `boost::locale::details::format_parser::set_one_flag(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /usr/include/boost/locale/format.hpp:395: undefined reference to `boost::locale::details::format_parser::get_position()'
/usr/bin/ld: /usr/include/boost/locale/format.hpp:335: undefined reference to `boost::locale::details::format_parser::~format_parser()'
/usr/bin/ld: /usr/include/boost/locale/format.hpp:335: undefined reference to `boost::locale::details::format_parser::~format_parser()'
/usr/bin/ld: CMakeFiles/projekt_testowy_1.dir/main.cpp.o: in function `void boost::locale::details::format_parser::set_flag_with_str<char>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/usr/include/boost/locale/format.hpp:114: undefined reference to `boost::locale::ios_info::get(std::ios_base&)'
/usr/bin/ld: CMakeFiles/projekt_testowy_1.dir/main.cpp.o: in function `boost::locale::basic_format<char>::format_guard::restore()':
/usr/include/boost/locale/format.hpp:288: undefined reference to `boost::locale::details::format_parser::restore()'
/usr/bin/ld: CMakeFiles/projekt_testowy_1.dir/main.cpp.o: in function `bool std::has_facet<boost::locale::message_format<char> >(std::locale const&)':
/usr/include/c++/9/bits/locale_classes.tcc:106: undefined reference to `boost::locale::base_message_format<char>::id'
/usr/bin/ld: CMakeFiles/projekt_testowy_1.dir/main.cpp.o: in function `boost::locale::message_format<char> const& std::use_facet<boost::locale::message_format<char> >(std::locale const&)':
/usr/include/c++/9/bits/locale_classes.tcc:134: undefined reference to `boost::locale::base_message_format<char>::id'
/usr/bin/ld: CMakeFiles/projekt_testowy_1.dir/main.cpp.o: in function `void boost::locale::ios_info::date_time_pattern<char>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/usr/include/boost/locale/formatting.hpp:157: undefined reference to `boost::locale::ios_info::date_time_pattern_set()'
collect2: error: ld returned 1 exit status
make[3]: *** [CMakeFiles/projekt_testowy_1.dir/build.make:106: projekt_testowy_1] Error 1
make[2]: *** [CMakeFiles/Makefile2:95: CMakeFiles/projekt_testowy_1.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:102: CMakeFiles/projekt_testowy_1.dir/rule] Error 2
make: *** [Makefile:137: projekt_testowy_1] Error 2


 

1
komentarz 9 lipca 2021 przez adrian17 Ekspert (344,860 p.)
No... to musisz dodać `locale` w liście componentów boosta w cmakelists. To, że w odpowiedzi napisałem `date_time filesystem iostreams`, to był tylko przykład z dokumentacji.
komentarz 11 lipca 2021 przez MOON0016 Obywatel (1,470 p.)

Dzięki wielkie za wszelką pomoc.

Z takim cmake program się kompiluje:

cmake_minimum_required(VERSION 3.19)
project(projekt_testowy_1)

find_package(Boost 1.71 REQUIRED COMPONENTS
        locale)

add_executable(projekt_testowy_1 main.cpp)
target_compile_features(projekt_testowy_1 PUBLIC cxx_std_14)
target_include_directories(projekt_testowy_1 PUBLIC ${Boost_INCLUDE_DIRS})
target_link_libraries(projekt_testowy_1 Boost::locale)


if(NOT Boost_FOUND)
    message(FATAL_ERROR "Could not find boost!")
endif()

Czy coś można w nim poprawić?

 

komentarz 11 lipca 2021 przez MOON0016 Obywatel (1,470 p.)

Jako drugi test chiałem skompilować program z unit testem:

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE Hello
#include <boost/test/unit_test.hpp>

int dodaj( int i, int j )
{
    return i + j;
}

BOOST_AUTO_TEST_CASE( testDodaj )
{
    BOOST_CHECK( dodaj( 2, 2 ) == 4 );
}

Jak powinien wyglądać do niego cmake?

cmake_minimum_required(VERSION 3.19)
project(projekt_testowy_2)

find_package(Boost 1.71 REQUIRED COMPONENTS
        unit_test)

add_executable(projekt_testowy_2 main.cpp)
target_compile_features(projekt_testowy_2 PUBLIC cxx_std_14)
target_include_directories(projekt_testowy_2 PUBLIC ${Boost_INCLUDE_DIRS})
target_link_libraries(projekt_testowy_2 Boost::unit_test)


if(NOT Boost_FOUND)
    message(FATAL_ERROR "Could not find boost!")
endif()

I co w powyższym jest napisane żle?

komentarz 11 lipca 2021 przez adrian17 Ekspert (344,860 p.)

I co w powyższym jest napisane żle?

Na oko, większość :( Poważnie, zajrzyj do dokumentacji, stackoverflow i istniejących programów do porównania, zamiast próbować na ślepo.

- to nie jest unit_test tylko unit_test_framework

- brakuje enable_testing() i add_test(), więc podstawowej rzeczy do jakichkolwiek testów.

komentarz 11 lipca 2021 przez j23 Mędrzec (194,920 p.)

Jeszcze raz powtórzę: jeśli w find_package podajesz komponenty, to nie rób tego w target_link_libraries, tylko daj ${Boost_LIBRARIES}. To zawrze odpowiednie biblioteki.

komentarz 11 lipca 2021 przez adrian17 Ekspert (344,860 p.)
Ale to nie ma związku z jego problemem (i AFAIK jest w ogólności odradzane do współczesnych projektów cmake?), bo pierwszy błąd jest już w find_package.
komentarz 11 lipca 2021 przez MOON0016 Obywatel (1,470 p.)
Dobra, dzięki wielkie za wszelką pomoc. Problem jest w tym, że chcę się nauczyć pisać testy i widzę, że największe problemy są w ogóle z tym, żeby zacząć
komentarz 11 lipca 2021 przez j23 Mędrzec (194,920 p.)

@adrian17, Dlaczego odradzane, skoro find_package dobierze odpowiednie biblioteki dla wymienionych paczek?

komentarz 11 lipca 2021 przez adrian17 Ekspert (344,860 p.)

Moon, może prostsza biblioteka, jak Catch(2)?

https://github.com/catchorg/Catch2

Dokumentacja ma też przykłady: https://github.com/catchorg/Catch2/blob/devel/docs/cmake-integration.md

Choć z boostem też byłeś blisko, musisz po prostu poprawić błędy które wymieniłem.

największe problemy są w ogóle z tym, żeby zacząć

Bo ciągle robisz dziwne losowe rzeczy :/ To nie jest dobre podejście do programowania, jak jest tyle źródeł dookoła.

j23, a to jest właśnie dobry przykład: nie, X_LIBRARIES to jest tylko lista linkowalnych plików bibliotek, a nie targetów cmake. Więc np biblioteka Catch w ogóle nie zadziała, bo w ogóle nie ma niczego linkowalnego; Ale jak przekażę target `Catch2::Catch2`, to cmake sam ogarnie jakie powinny być include'y i biblioteki do zlinkowania.

1
komentarz 11 lipca 2021 przez j23 Mędrzec (194,920 p.)

@MOON0016, daj unit_test_framework zamiast unit_test.

komentarz 11 lipca 2021 przez MOON0016 Obywatel (1,470 p.)
Dziękuje, z dodaniem framework już działa.

Właśnie chciałem typowo z boosta ponieważ w pracy o którą docelowo chcę się starać wymagane są unit testy z boosta dlatego chciałbym się tego nauczyć. Dziękuję też za te linki do Catch, przejże je i będę się z czegoś uczył bo wiem że w tym momencie to grzebałem na ślepo jak kijem w mrowisku
komentarz 11 lipca 2021 przez adrian17 Ekspert (344,860 p.)

z dodaniem framework już działa.

Musisz jeszcze dodać enable_testing() i add_test() żeby dało się odpalać testy przez cmake'owe `ctest`.

Podobne pytania

0 głosów
1 odpowiedź 926 wizyt
0 głosów
1 odpowiedź 577 wizyt
0 głosów
0 odpowiedzi 367 wizyt
pytanie zadane 14 grudnia 2020 w Systemy operacyjne, programy przez Maciow Nowicjusz (120 p.)

92,567 zapytań

141,420 odpowiedzi

319,615 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...