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

Pytania dotyczące problemów z wyborem, konfiguracją i pracą w wybranym środowisku programistycznym dla C++: Eclipse, Visual Studio, itp.
Awatar użytkownika
acid3
User
User
Posty: 420
Rejestracja: czwartek 03 wrz 2015, 22:42
Lokalizacja: Kłopoty-Stanisławy
Kontaktowanie:

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

Postautor: acid3 » sobota 13 paź 2018, 20:09

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.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
piotrek
Newb
Newb
Posty: 85
Rejestracja: niedziela 05 lis 2017, 02:46

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

Postautor: piotrek » sobota 13 paź 2018, 22:14

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)

Awatar użytkownika
acid3
User
User
Posty: 420
Rejestracja: czwartek 03 wrz 2015, 22:42
Lokalizacja: Kłopoty-Stanisławy
Kontaktowanie:

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

Postautor: acid3 » sobota 13 paź 2018, 22:18

Działa ! ( jakieś 10 minut temu tez z kolegą Antystatycznym podążaliśmy tą drogą )

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

Awatar użytkownika
acid3
User
User
Posty: 420
Rejestracja: czwartek 03 wrz 2015, 22:42
Lokalizacja: Kłopoty-Stanisławy
Kontaktowanie:

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

Postautor: acid3 » sobota 13 paź 2018, 22:21

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 )
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1105
Rejestracja: czwartek 03 wrz 2015, 22:02

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

Postautor: Antystatyczny » sobota 13 paź 2018, 22:22

No i super. Masz wybrany dialekt c++17 oraz linkujesz stdc++fs.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
mokrowski
User
User
Posty: 179
Rejestracja: czwartek 08 paź 2015, 20:50
Lokalizacja: Tam gdzie Centymetro

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

Postautor: mokrowski » niedziela 14 paź 2018, 11:15

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
,,Myślenie nie jest łatwe, ale można się do niego przyzwyczaić" - Alan Alexander Milne: Kubuś Puchatek

Awatar użytkownika
acid3
User
User
Posty: 420
Rejestracja: czwartek 03 wrz 2015, 22:42
Lokalizacja: Kłopoty-Stanisławy
Kontaktowanie:

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

Postautor: acid3 » poniedziałek 15 paź 2018, 20:31

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.

Awatar użytkownika
mokrowski
User
User
Posty: 179
Rejestracja: czwartek 08 paź 2015, 20:50
Lokalizacja: Tam gdzie Centymetro

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

Postautor: mokrowski » poniedziałek 15 paź 2018, 22:40

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" :)
,,Myślenie nie jest łatwe, ale można się do niego przyzwyczaić" - Alan Alexander Milne: Kubuś Puchatek

Awatar użytkownika
acid3
User
User
Posty: 420
Rejestracja: czwartek 03 wrz 2015, 22:42
Lokalizacja: Kłopoty-Stanisławy
Kontaktowanie:

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

Postautor: acid3 » wtorek 16 paź 2018, 17:46

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.


Wróć do „Jakie IDE dla C++?”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości