我正在尝试做类似的事情(在多个文件中(:
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
(...)
我的问题是:
- 当我用一组定义的值编译程序,然后更改它们,然后再次编译程序时,会发生什么
- 编译器会重新构建整个程序吗?还是只重新构建一个文件:"commonheader.o",程序的其余部分将保持不变
我在问c++,
我感兴趣的编译器:
- visualstudio编译器
- gcc编译器
- nvcc编译器
非常感谢!
编辑:
对不起,我误导了你。。我在common_header.h中声明了一些全局外部值(如数据流(,并在common_header.cpp文件中定义了它们,这会改变什么吗?我在每种情况下都会得到*.o文件
Visual Studio IDE足够智能,可以在头文件更改时重新编译使用头文件的源文件。
您表示您正在将GCC和NVCC与make
一起使用。是否重新编译源文件取决于您的Makefile——这与编译器或make
无关。
当我用一组定义的值编译程序,然后更改它们,然后再次编译程序时,会发生什么?
该程序将用新的定义代替旧的定义进行重新编译。
我在common_header.h中声明了一些全局外部值(如数据流(,并在common_header.cpp文件中定义了它们,这会改变什么吗?编译器会重新构建整个程序吗?还是只重新构建一个文件:
common_header.o
,程序的其余部分将保持不变?
生成系统将至少重新生成依赖于标头的所有文件。较旧的系统要求您指定依赖项;更现代的系统将自动检测依赖关系。
这不是编译器特定的。一些构建系统将比其他构建系统更有效地完成这项工作,例如,在所有依赖项不变的情况下跳过对cpp文件的重新编译。然而,您应该指望的效果是,标头的所有依赖项都将重新生成。