2016-10-09 1 views
1


Ich bin versucht, so etwas wie das (in mehreren Dateien) zu tun:#den Wert in einer separaten Datei definieren, wie wirkt sich dies auf die Kompilierung aus?

common_header.h:

#define NX   256  //! grid size: x axis 
#define NY   256  //! grid size: y axis 
#define NZ   256  //! grid size: z axis 
#define DX   0.5f  //! grid step: x axis 
#define DY   0.5f  //! grid step: y axis 
#define DZ   0.5f  //! grid step: z axis 
#define DT   0.1f  //! grid step: time 

extern std::ostream stream_out 

common_header.cpp:

std::ostream stream_out("data_out.txt", ios_base::out); 

file_1.cpp:

//functions are using #defined values 
(...) 

file_2.cpp:

//functions are using #defined values 
(...) 

file_3.cpp:

//functions are using #defined values 
(...) 

und meine Frage ist:

  • Was passiert, WHE n Ich kompiliere das Programm mit einem Satz definierter Werte, ändere sie und kompiliere das Programm noch einmal?
  • Wird der Compiler das ganze Programm neu aufbauen? Oder wird es nur eine Datei neu erstellen: "common_header.o" und Rest des Programms wird unverändert bleiben?

ich c bin gefragt ++,
Compiler Ich bin interessiert an:

  • Visual Studio Compiler
  • gcc-Compiler
  • nvcc Compiler

Vielen Dank !

EDIT:

sory ich Sie täuschen .. ich einige globale externa Werte bin erklärt (wie Datenströme) in common_header.h und definieren sie in common_header.cpp Datei wird es etwas ändern? Ich bekomme * .o Dateien in jedem Fall

+0

Wie kompilieren Sie das Programm in jedem dieser Fälle? – immibis

+0

Überprüfen Sie die von Ihrem Build erstellten Zwischendateien - Sie werden feststellen, dass es keine common_header.o gibt. Ja, im Allgemeinen, wenn Sie eine Kopfzeile ändern, müssten Sie jede Quelldatei, die diese Kopfzeile enthält, direkt oder indirekt neu kompilieren. –

+0

@immibis vs Compiler von IDE, gcc von Makefile (ich mache separate * .o Datei) nvcc (hängt vom System ich arbeite mit) – cukier9a7b5

Antwort

0

Was passiert, wenn ich Programm mit einem Satz von definierten Werten kompiliere, sie dann ändere und dann das Programm noch einmal kompiliere?

Das Programm wird mit den neuen Definitionen anstelle der alten neu kompiliert.

Ich deklariere einige globale externe Werte (wie Datenströme) in common_header.h, und definieren sie in common_header.cpp Datei wird es etwas ändern? Wird der Compiler das ganze Programm neu aufbauen? oder wird es nur eine Datei neu aufbauen: common_header.o und Rest des Programms wird unverändert bleiben?

Build-System wird mindestens alle Dateien neu erstellen, die von der Kopfzeile abhängig sind. Bei älteren Systemen müssen Sie die Abhängigkeiten angeben. modernere werden Abhängigkeiten automatisch erkennen.

Dies ist nicht Compiler-spezifisch. Einige Build-Systeme werden dies effizienter als andere tun - zum Beispiel durch das Überspringen des Neukompilierens von cpp-Dateien mit allen ihren Abhängigkeiten unverändert. Sie sollten sich jedoch darauf verlassen, dass alle Abhängigkeiten des Headers neu erstellt werden.

+0

sory Ich irre dich .. Ich erkläre einige allgemeine externa Werte (wie Datenströme) in common_header.h, und definieren sie in common_header.cpp Datei wird es etwas ändern? Ich bekomme in jedem Fall * .o Dateien. – cukier9a7b5

+0

vielen Dank. – cukier9a7b5

0

Die Visual Studio-IDE ist intelligent genug, um die Quelldateien neu zu kompilieren, die Ihre Headerdatei verwenden, wenn sich die Headerdatei ändert.

Sie haben angegeben, dass Sie GCC und NVCC mit make verwenden. Ob die Quelldateien neu kompiliert werden, hängt davon ab, Ihre Makefile - es hat nichts mit dem Compiler oder mit make zu tun.

+0

vielen Dank. – cukier9a7b5

Verwandte Themen