[Visual C++] Projekt out-of-date i Debug zamiast Build

hej, mam dwa pytania odnosnie Visuala C++ Express 2010, ktorego co dopiero zainstalowałem.

1#

Dlaczego w menu nie ma opcji Build tylko jest Debug (klawisz F5) :?:

MS połączył opcję Build z debugowaniem, żeby nam przy okazji ‘odpluskiwano’ (‘odrobaczano’) kod przy buildowaniu (czyli kompilacji i linkowaniu wszystkich plików) :?:

2#

Dlaczego po stworzeniu nowego projektu, wyświetla mi się, że projekt jest nieważny (out-of-date) ? Muszę zaznaczać, żeby ta wiadomosc sie już nie pokazywała i pomimo tej ‘nieważności’ kompilować.

w Google znalazlem, ze

No ale właśnie chcę to z kompilować, a pojawia się ten komunikat. Nie logiczne to…

Z góry dziekuje za odpowiedz na dwa krotkie pytanka i pozdrawiam,

Józef :wink:

AD 1. Jak nie ma jak jest. W głównym menu obok sekcji Debug jest sekcja Build. Naciśnij F6, powinno zadziałać.

AD 2. Napisz jeszcze jaki projekt próbujesz utworzyć. Ja osobiście nie spotkałem się z takim problemem, ale to może dlatego, że wciąż siedzę na wersji 2008.

1#

A fakt, miałem włączone Basic settings. A to co teraz mam używać, bo mam wątpliwości:

  • Debug :?: (to jest debug + build chyba, bo po debugowaniu uruchamia mi program)

  • Build :?:

  • Start without debugging :?: (nie wiem co to jest, chyba też build, no ale 2 opcje do tego samego ?)

2#

Empty project. Nie, ja to też miałem w 2008.

Teraz to chyba nie występuje, bo mam taki komunikat:

Chociaż nie wiem czemu te projekty po stworzeniu zaraz są out-of-date…

Mam jeszcze 2 pytanka malutkie:

3#

Build to połączenie kompilacji i linkowania wszystkich plików :?:

4#

Czym się różni Build od Build Solution :?: W obydwu przypadkach dostaję ten sam komunikat:


Z góry ponowne wielkie dzięki za pomoc :slight_smile:

AD 1.

Debug -> Najpierw Build (F6), a następnie uruchomienie aplikacji z możliwością debugowania

Start without debugging -> Najpierw Build (F6), a następnie uruchomienie aplikacji bez możliwości debugowania

Build -> Po prostu Build (F6) i nic więcej

AD 2.

Najwyraźniej jakiś bug w Visual Studio. Ważne, że po operacji Build wszystko jest OK. Następnym razem nie zaznaczaj Do not show this message again. Tego typu rzeczy lepiej widzieć.

AD 3.

Między innymi. Jeśli chcesz dowiedzieć się, co dokładnie jest wykonywane w trakcie operacji Build to otwórz okienko Output (View -> Output). Następnie wykonaj Build i w tym okienku Output będziesz miał napisane co dokładnie było robione.

AD 4.

W solution możesz mieć kilka różnych projektów. Build Solution spowoduje, że wykonana zostanie operacja Build dla wszystkich projektów z tego Solution (można decydować przez ustawienia, które dokładnie mają być Build-owane, ale to jest teraz nieistotne). Build spowoduje wykonanie operacji Build tylko dla tego projektu (ewentualnie również dla projektów zależnych).

W obu przypadkach masz to samo, bo masz tylko jeden projekt w całym Solution. No a, że wykonałeś operację Build tego projektu wcześniej to teraz pokazuje Ci tylko 1 up to date. Zmień coś w kodzie to zobaczysz 1 succeeded.

Dzięki wielkie :wink:

Aha czyli solution to taki workspace jak w Code::Blocks. Nazwa jest trochę myląca…

A jeszcze odnośnie Build na wiki znalazłem coś takiego (na polskiej tego nie ma):

Nie wiem, co to jest ten artefakt, wg Wikipedii jest to:

Czyli: artefakt jest jednym z różnych rodzai “namacalnych, wyraźnych”" by-produktów (“odpadów”) wyprodukowanych podczas rozwoju oprogamowania.

Nie prościej było by napisać wcześniej:

:?:

Tak, można tak powiedzieć. Jeśli chcesz podejrzeć ten plik solution to otwórz plik *.sln w jakimś edytorze, np. w notepad++.

Osobiście dostałem oczopląsu od tych definicji :smiley: Nie wiem jak można by to lepiej napisać. Z pewnością executable program nie można tłumaczyć na program .exe, bo np. w linuxie plik wykonywalny nie jest rozpoznawany po tym, że ma rozszerzenie .exe (ale zakładam, że z Twojej strony to był skrót myślowy).

Na Wikipedii pod pojęciem Software build piszą, że

Ty jakby scaliłeś rezultat kompilacji do definicji Build. Może tak można zrobić, może nie … po prostu nie wiem. Najlepiej niech ktoś inny się wypowie, ja tu wymiękam.

A odnośnie tych projektów nowych, to jak tworzysz jakiś to zaznaczasz Create directory for solution :?:

Mi nie chodziło o tłumaczenie executable program na .exe (no przecież tak się nie da chyba - program wykonywalny tłumaczyć znowu na program wykonywalny, tyle, że z takim samym/innym rozszerzeniem), tylko po prostu o program wykonywalny (rozszerzenie nie ma znaczenia, ważne ze jest skompilowany i mozna go luzem uruchomić).

OK spoko, zapamiętam to tak jak pisałem, bo tej oryginalnej definicji nie sposób zrozumieć :stuck_out_tongue:

Tak, tak jest moim zdaniem estetyczniej.

A dlaczego taka opcja w ogóle tam jest, skoro dodatkowy projekt do Solution (czyli workspace) dodaje się klikając na Solution for <…> w Solution Exploler :?:

Nie rozumiem, co ma do rzeczy to, z którego miejsca dodaje się dodatkowe projekty do Solution.

Opcja Create directory for solution daje Ci możliwość wyboru, gdzie mają zostać zapisane pliki sln i suo (czyli pliki danego solution). Odhaczenie tej opcji wydaje się mieć sens tylko wtedy, gdy tworzony solution będzie zawierać tylko jeden projekt. Wówczas to, że pliki Solution będą umieszczone razem z plikami projektu nie będzie przeszkadzać (choć ja i tak zawsze zostawiam tą opcje zaznaczoną). Natomiast jeśli Solution będzie zawierać więcej projektów to lepiej zostawić tą opcję zaznaczoną (choć nie jest to wymagane), bo będzie to po prostu bardziej estetyczne rozwiązanie, a przynajmniej takie jest moje zdanie. O czym zresztą pisałem powyżej.

Aha, jak będzie zaznaczona to pliki solution będą wymieszane, a pliki projektów w osobnych folderach. A jak nie będzie zaznaczona to pliki projektów tez będa wymieszane.


W Code::Blocks siedze już długo, i tam jak już mówiłem Solution to Workspace. I żeby dodać wiele projektów do tego workspace, wystarczy je otworzyć wszystkie naraz. Natomiast, rzeczywiscie nie da sie ich tak połaczyc po zamknięciu programu jak to robi VS, żeby te projekty były w osobnych folderach w 1 folderze o nazwie danego solution.

Ale nie wiem czy tej opcji kiedykolwiek użyje - mi dany projekt kojarzy się z osobnym programem, więc istnieje sens żeby te projekty (obce programy) łączyć do 1 solution ? Kiedy takie cos sie stosuje :?:

Postawiłem to pytanie w wyniku przyzwyczajenia do Code::Blocks ;p

Wydaje mi się, że “out of date” oznacza, iż program nie został skompilowany po zmianach w kodzie źródłowym.

No i zrobimy taki jeden ogromny projekt na 5000 plików i milion linii kodu, a po zmianie umiejscowienia jednego przycisku w okienku, trzeba będzie godzinę wszystko kompilować. Bez sensu.

Aplikację dobrze jest podzielić, np. w oddzielnym projekcie interfejs użytkownika (aplikacja .exe), w oddzielnym warstwa dostępu do danych, w innym logika biznesowa, w kolejnym funkcje pomocnicze (te już jako biblioteki dll). Szybciej się z tym pracuje, łatwiej wprowadzać zmiany, podzielić się pracą w zespole i przede wszystkim jest czytelniej.

No możliwe, bo ja zawsze daję Debug (Build + start .exe) zamiast Build. I pewnie dlatego mnie pyta, bo nie wie czy nie buildować (i pewnie uruchamiać starą skompilowaną wersje - jezeli taka jest), czy buildować aktualną wersję. Pewnie jakbym zamiast Debug używał Build to by takich komunikatow nie było, ale nie chce mi się naciskać 2 ikonek :stuck_out_tongue:

Zresztą po zaznaczeniu opcji “Always build” - wszystko jest OK, przy Debug projekty są buildowane zawsze, jeżeli nastąpiły zmiany.