Du bist nicht angemeldet.

Werbeanzeige

Progater

Treue Seele

  • »Progater« ist der Autor dieses Themas

Beiträge: 119

Wohnort: BW

  • Private Nachricht senden

1

22.05.2009, 18:55

VC 9

Hi, ich habe so 'ne Frage:

Wenn man bei VC 9 eine Header-Datei (*.hpp) verändert, dann wird zwangsweise das ganze Projekt neu kompiliert, obwohl die Änderungen doch nur auf diese Header-Datei und dessen Quellcode-Datei bezieht. Dann darf man mal wieder paar Minuten warten :(

Weiß jemand, ob es möglicht ist, VC so einzustellen, dass der Kompiler eben nur die eine obj-Datei erstellt, wenn man vielleicht einen Kommentar in der Header-Datei mal schnell geändert hat? Hab' bisher leider nichts gefunden.
To go back to the drawing board is not everyone's cup of tea! :-)

drakon

Supermoderator

Beiträge: 6 524

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

22.05.2009, 19:00

Da gibt es verschiedene Möglichkeiten das zu steuern. Du kannst mal versuchen nur die zugehörigen .cpp Dateien zu kompilieren. (Strg+F7).

Precompiled Headers wäre dann später auch nützlich, wenn gewisse Header oft genutzt werden.

Die Abhängigkeiten im Code zu minimieren ist ein weitere Schritt die Kompilierzeiten zu verringern. Also nur Header einbinden, wo nötig, ansonsten Vorwärtsdeklarationen nutzen und wenn nötig Klassen wrappen (pImpl-Idiom).

3

22.05.2009, 19:15

In den Projekteinstellungen unter C++ - Codegenerierung -> Minimale Neuerstellung aktivieren
fka tm

Nox

Supermoderator

Beiträge: 5 278

Beruf: Student

  • Private Nachricht senden

4

22.05.2009, 19:24

Und Headerabhängigkeiten minimieren.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Progater

Treue Seele

  • »Progater« ist der Autor dieses Themas

Beiträge: 119

Wohnort: BW

  • Private Nachricht senden

5

23.05.2009, 14:24

Zitat von »"drakon"«

Da gibt es verschiedene Möglichkeiten das zu steuern. Du kannst mal versuchen nur die zugehörigen .cpp Dateien zu kompilieren. (Strg+F7).

Das ist eigentlich sowieso der Fall. Immer wenn ich die cpp-Datei verändere, wird am Ende auch nur diese kompiliert.

Zitat von »"drakon"«


Precompiled Headers wäre dann später auch nützlich, wenn gewisse Header oft genutzt werden.

[...] und wenn nötig Klassen wrappen (pImpl-Idiom).

Hab' mich etwas darüber informiert. Das sind wohl etwas fortgeschrittene Techniken. Schau mir das später genauer an.

Zitat von »"TrikkieMikkie"«

In den Projekteinstellungen unter C++ - Codegenerierung -> Minimale Neuerstellung aktivieren

Bei mir ist das die Standardeinstellung.

Zitat von »"drakon"«


Die Abhängigkeiten im Code zu minimieren ist ein weitere Schritt die Kompilierzeiten zu verringern. Also nur Header einbinden, wo nötig, ansonsten Vorwärtsdeklarationen nutzen

Zitat von »"Nox"«

Und Headerabhängigkeiten minimieren.

Das ist es ;) Ich habe bei meinen Projekten immer so gemacht, dass alle Header an zentraller Stelle includiert werden. War mir gar nicht bewusst, dass so alles voneinander abhängt. Nun habe ich meinen Still etwas geändert, includiert wird nur das, was nötig ist, ansonsten immer Vorwärtsdeklaration. Nun muss ich mich nicht mehr darüber ärgern, dass das ganze Projekt neu kompiliert wird, wenn mich mal ein Schreibfehler in der Header-Datei stört ;)
To go back to the drawing board is not everyone's cup of tea! :-)

drakon

Supermoderator

Beiträge: 6 524

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

6

23.05.2009, 14:47

Kleine Repetition, was nötig ist:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "A.h"
#include "B.h"
#include "C.h"
#include "D.h"
#include "E.h"
#include "F.h"
#include "G.h"
#include "H.h"
#include "I.h"
#include "J.h"

class foo : public J
{
public:
 A bar1 ( B );
 C& bar2 ( D & );
 E* bar3 ( F* );
 
private:
 G g;
 H& h;
 I* i;
};


Welche includes sind hier unnötig und wo reichen Vorwärtsdeklarationen?

Progater

Treue Seele

  • »Progater« ist der Autor dieses Themas

Beiträge: 119

Wohnort: BW

  • Private Nachricht senden

7

23.05.2009, 19:20

Ich würde sagen, G.h muss schon includiert sein, da ein Klassen-Objekt im Voraus wissen muss, wie viel Speicher reserviert werden soll. Bei A, B bin ich mir nicht ganz sicher. Alles andere sind ja Zeiger und Referenzen, die immer den gleichen Speicherbedarf haben. Vorwärtsdeklaration reicht aus.

Zitat von »"drakon"«

Welche includes sind hier unnötig und wo reichen Vorwärtsdeklarationen?

Müsste die Frage nicht "Welche includes sind hier nötig und wo reichen Vorwärtsdeklarationen?" heißen, denn wo sie unnötig sind, reicht ja die Vorwärtsdeklaration aus ;)
To go back to the drawing board is not everyone's cup of tea! :-)

8

23.05.2009, 20:25

Nur G.h muss inkludiert werden, für den Rest reichen auch Vorwärtsdeklarationen.

9

23.05.2009, 20:57

Zitat von »"Genion"«

Nur G.h muss inkludiert werden, für den Rest reichen auch Vorwärtsdeklarationen.
Auch wenn die Frage wohl nicht an dich gerichtet war, hast du sie falsch beantwortet. :p
J muss ebenfalls vollständig bekannt sein.

P.S. Gutes Beispiel, drakon! :)

drakon

Supermoderator

Beiträge: 6 524

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

10

24.05.2009, 13:08

Zitat

Müsste die Frage nicht "Welche includes sind hier nötig und wo reichen Vorwärtsdeklarationen?" heißen, denn wo sie unnötig sind, reicht ja die Vorwärtsdeklaration aus


Jop, da habe ich wohl während dem scheiben den Satz umgestellt.

Korrekt. Lediglich G und J sind nötig und das aus demselben Grund.
btw. Das kann (unter anderem) ein wichtiger Faktor beim Design sein, wenn es darum geht, ob aggregierung oder private Vererbung benutzt werden soll.

Werbeanzeige