Strona 1 z 1

[Code::Blocks] Jak na Linuksie uzywac dobrodziejstw C++17

: sobota 13 paź 2018, 20:09
autor: acid3
Chciałem pouczyć się C++. Mam pomysł na aplikację , na Linuksa, i chciałbym pomału zacząć ją sobie pisać. Na maszynie wirtualnej zainstalowałem Linux Mint 19 oraz Code::Blocks oraz g++-7 i g++-8. Właśnie te wersje dlatego, że jak się doczytałem są zgodne z C++17. Chcę wykorzystać ten własnie standard , dlatego że ma coś co się nazywa filesystem. No i jak się uczyć to na najnowszym sprzęcie. Niestety , pomimo przejrzenia całego internetu ( dzwoniłem do Chucka ) nie udało mi się zmusić tegoż IDE do skompilowania typowego przykładu. Przykład jest wzięty gdzieś z oficjalnych źródeł od standardu C++17. Na windowsie , Visual Studio 2017 przełknęło, skompilowało i uruchomiło ten przykład bezbłędnie.

W załącznikach screeny z błędami kompilacji oraz z ustawieniami kompilatora, dodatkowymi parametrami oraz ścieżkami.

Zrzut ekranu 2018-10-13 20.00.40.png

Zrzut ekranu 2018-10-13 20.00.30.png

Zrzut ekranu 2018-10-13 13.29.37.png

Zrzut ekranu 2018-10-13 20.02.42.png



PS. To IDE bo tak ... zobaczyłem je i mi się spodobało i mam chęć go poużywać, Eclipse jakieś problemy stwarza których nie rozumiem i nie mam chęci się z nim kopać.

PS2. Tak, znam biblioteki Boost oraz Dirent, ale nie chcę ich używać, wolę coś natywnego co już istnieje w standardzie.

Re: [Code::Blocks] Jak na Linuksie uzywac dobrodziejstw C++17

: sobota 13 paź 2018, 22:14
autor: piotrek
Spróbuj skompilować kod

Kod: Zaznacz cały

#include <string>
#include <iostream>
#include <experimental/filesystem>

using namespace std;
namespace fs = std::experimental::filesystem;

int main() {
   
   string path = fs::current_path();
   for(auto & p : fs::directory_iterator(path)) {
      cout << p << endl;
   }
   int n;
   cin >> n;
}


poleceniem

Kod: Zaznacz cały

g++ -std=c++17 main.cpp -o main -lstdc++fs
./main


u mnie działa :P (Mint 18.3)

Re: [Code::Blocks] Jak na Linuksie uzywac dobrodziejstw C++17

: sobota 13 paź 2018, 22:18
autor: acid3
Działa ! ( jakieś 10 minut temu tez z kolegą Antystatycznym podążaliśmy tą drogą )

Jeszcze tylko ożenienie tego C::B ...

Re: [Code::Blocks] Jak na Linuksie uzywac dobrodziejstw C++17

: sobota 13 paź 2018, 22:21
autor: acid3
No i tak to się kończy ...
Zrzut ekranu 2018-10-13 22.18.43.png

dodanie flagi kompilatora -std=c++17

Zrzut ekranu 2018-10-13 22.18.57.png

oraz flagi -lstdc++fs

( nie wiem czy to jest prawidłowo zrobione, zgodnie ze sztuką , ale DZIAŁA i tylko to na obecną chwilę się liczy )

Re: [Code::Blocks] Jak na Linuksie uzywac dobrodziejstw C++17

: sobota 13 paź 2018, 22:22
autor: Antystatyczny
No i super. Masz wybrany dialekt c++17 oraz linkujesz stdc++fs.

Re: [Code::Blocks] Jak na Linuksie uzywac dobrodziejstw C++17

: niedziela 14 paź 2018, 11:15
autor: mokrowski
Ja jestem raczej "agnostyczny" jeśli chodzi o IDE. Używam kilku. Myślę że warto zwrócić uwagę na kilka istotnych kwestii.

Na Eclipse nie obrażał bym się tak szybko. C::B jest nieco ubogim IDE jeśli chodzi o kwestie refaktoryzacji kodu i utrzymanie większego projektu. Powinieneś mieć mocne przesłanki do tego by się przy nim upierać (np. wspaniała zgodność z wxWigdets). Do początkowych zabaw wystarcza, później jest kulą u nogi. Poza tym ma małe wsparcie jeśli chodzi o MCU (da się ale będzie walka) a Eclipse stał się standardem jeśli chodzi o wspieranie embedded. Co będzie dalej nikt nie wie w świetle działań firmy Oracle i chęci pobierania opłat za Java 11. Jeśli Cię stać, profesjonalnym narzędziem jest CLion (wersja próbna 30 dni dostępna).

Co do dystrybucji, nie wiem czy wiesz ale już dostępny jest kompilator gcc 8.2 (a 9.0 w wersji beta). Linux Mint, bazuje na Ubuntu LTS a ono z założenia jest nieco "zachowawcze" jeśli chodzi o nowoczesne narzędzia. gcc 8.2 wspiera już mechanizmy (niektóre) które mają wejść w C++20 poprzez -std=c++2a. Do testowania takich rzeczy polecam Fedorę (nie nie chcę otwierać dyskusji o wyższości konkretnych dystrybucji, mówię tylko jak jest ... w F28 jest dostępny gcc 8.1.1 i clang 6.0.1). Każda dystrybucja ma swoje ale.... Fedora z racji szybkości wydań, potrafi się wywrócić na update ale ja nie wymagam od niej stabilności tylko mniejszych problemów z nowoczesnymi narzędziami (maja być).

Jeśli kompilator wspiera w pełni c++17, powinieneś już mieć <filesystem> a nie <experimental/filesystem>. Jeśli taki kod Ci się skompiluje, możesz bezpiecznie ćwiczyć C++17. Jeśli nie, masz jeszcze narzędzia nie w pełni wspierające ten standard:

Kod: Zaznacz cały

#include <string>
#include <iostream>
#include <filesystem>

using namespace std;
namespace fs = std::filesystem;

int main() {
   
   string path = fs::current_path();
   for(auto & p : fs::directory_iterator(path)) {
      cout << p << endl;
   }
   int n;
   cin >> n;
}

Kod: Zaznacz cały

g++ -std=c++17 -o prog prog.cpp -lstdc++fs

Re: [Code::Blocks] Jak na Linuksie uzywac dobrodziejstw C++17

: poniedziałek 15 paź 2018, 20:31
autor: acid3
Tak na szybko, kompilacja za pomocą g++ nie powiodła się.

Natomiast to :

Kod: Zaznacz cały

g++-8 -std=c++17 -o prog main.cpp -lstdc++fs
zadziałało bezbłędnie.

Czyli to oznacza że mogę normalnie korzystać z dobrodziejstw C++17 ?

PS. Po zainstalowaniu na VM Fedory 28 też nie zadziałało.

Re: [Code::Blocks] Jak na Linuksie uzywac dobrodziejstw C++17

: poniedziałek 15 paź 2018, 22:40
autor: mokrowski
No to wołaj kompilator jako g++-8 jeśli masz w dystrybucji. Na ten moment nawet powinno zadziałać -std=c++2a czyli elementy standardu c++20.
Co do kompilatora w F28 które ponoć nie działa, cóż ... pewnie to Cię nie pocieszy ale "u mnie działa" :)

Re: [Code::Blocks] Jak na Linuksie uzywac dobrodziejstw C++17

: wtorek 16 paź 2018, 17:46
autor: acid3
Po ustawieniu w C::B w ustawieniach kompilatora na g++-8 działa jak należy.

Nie wiąże z tym IDE większych nadziei , ale nie znałem go całkowicie, więc pomyślałem że można by poużywać w celach naukowych.

Póki co na szczęście C++20 nie jest mi potrzebne, mam nadzieję, choć przyznaję nie bardzo w tej chwili nawet wiem co ono ma ciekawego.