przede wszystkim mam nadzieję, że pytanie jest jednak w dobrym dziale - jeśli nie, proszę o info bądź moderatora o przesunięcie.
Dotąd programowałem (jeśli chodzi o C++) albo na linuxie, albo na windowsie w Dev-C++ - tu i tu korzystając z kompilatora gcc. Teraz jednak mając dostęp do legalnego Visual Studio w wersji 2012 (bądź też starszej) odkrywam powoli jego wady i zdarzające się zalety, np. fajny edytor “windows forms application”. Moim podstawowym problemem jest objętość wygenerowanego projektu - prosty Hello World ma 37 MB, a folder z projektem ma tryliard plików, przy czym źródło .cpp od .exe dzielą chyba 2 czy 3 przejścia między katalogami.
Moje pytanie - jak to odchudzić, by wygenerowany projekt miał maksymalnie mało plików (zarówno jeśli chodzi o aplikacje tekstowe clr, jak i o okienkowe), czyli tylko te potrzebne, i zajmował rozsądną ilość miejsca? Dla porównania taki głupi mały projekt z plikami kompilacji w gcc zajmuje 5 KB + 1.36 MB .exe.
To coś baaardzo sknociłeś. Jak żyję i programuję w Visual Studio w życiu mi nie skompilowało tak wielkiego programu. I to nie ma aż takiej różnicy czy debug czy release - kilka kilobajtów może. Zobacz czy przypadkiem nie zlinkowałeś w tym programie wszystkiego co się da.
Rzeczywiście Visual tworzy dość spore dodatkowe pliki.
Nie wiem jak jest w 2012 ale opowiem co możesz zrobić w 2010 bo taki mam
Jak już zakończysz pracę nad daną solucją (bo wcześniej nie ma sensu) to:
[*:1cqaz6dw]w katalogu solucji możesz usunąć plik bazy IntelliSense o nazwie takiej jak solucja z rozszrzeniem .sdf[*:1cqaz6dw]możesz też usunąć katalog ipch[*:1cqaz6dw]oprócz tego możesz jeszcze usunąć katalogi Debug i Release w katalogach projektów [*:1cqaz6dw]w sumie w katalogu solucji też możesz usunąć Debug czy Release jeśli Ci nie potrzebne
Po następnym budowniu solucji te pliki bedą z powrotem, dlatego opłaca sie to robić tylko po zakończeniu pracy.
Sam exe w katalogu Debug bądź Release ma koło 100 KB i to jest najmniejszy problem
Mam w zwyczaju trzymać projekty w katalogu synchronizowanym z chmurą, więc wolałbym, by projekt od razu tworzył się mniejszy. No i, co pewnie ma związek, samo utworzenie projektu i kompilacja są kilkakrotnie dłuższe niż używając dev-cpp.
I tu się z Tobą zgadzam - dlatego proszę o pomoc
Napiszę, co po kolei robię, by uzyskać wynik 30 MB, i byłbym wdzięczny za info, co konkretnie knocę (i wersja 2012/2010 nie ma tu znaczenia, bo mam dostęp do obu i jest w zasadzie tak samo):
Dev-Cpp czy kompilowanie przez G++ z linii komend nie tworzy bazy danych IntelliSense(czy innego podpowiadania składni), która przez to, że jest optymalizowana pod kątem szybkości dostępu, może mieć dość duży rozmiar.
Precompiled Headers(stdafx.h, .pch) też trochę zajmują - można je wyłączyć w opcjach projektu, ale odpowiednio wykorzystywane przyspieszają kompilację dużych projektów.
Tworzysz projekt CLR - integracja natywnego języka z opartym o CLR też trochę kosztuje(zarówno czasu kompilacji jak i pamięci - indeksowane są wszystkie referencje do bibliotek CLR, przez co dodatkowo rośnie baza danych IntelliSense, a i pliki PCH mają więcej rzeczy do pomieszczenia).
VS zachowuje skompilowane wersje poszczególnych plików źródłowych, dzięki czemu nie trzeba ich zawsze kompilować.
VS domyślnie generuje informacje dla debuggera i masę logów.
Jeśli nie używasz CLR nie ma sensu tworzyć projektu pod .NET, natywny wystarczy(będzie mniejszy). Trzeba się też przyzwyczaić, że to nie jest IDE pokroju Dev-C++, tylko potężna kobyła, która musi coś poświęcać, by ta funkcjonalność działała sensownie.
VS w wersji Express jest dostępny za darmo dla każdego przynajmniej od wersji 2005
To są rozsądne rozmiary. Po prostu to jest za duże IDE, by można było to ograniczyć do kilku KB(co nie zmienia faktu, że generowanie PDB, PCH i logów można wyłączyć, przechowywanie skompilowanych OBJ pewnie też, ale od tego jest Google/Bing i MSDN by zobaczyć jak - wymaga to trochę grzebania w konfiguracji, czego mi się robić zwyczajnie nie chce, bo jest zbyt proste do znalezienia w dowolnej wyszukiwarce).
Od trzymania kodu są systemy kontroli wersji(Git, Hg, czy nawet SVN, można z powodzeniem zsynchronizować z chmurą) i tego bym zaczął używać. Ewentualnie możesz nie synchronizować całego folderu projektu, tylko wymagane pliki - .sln, .vcxproj itp.