#在单独的文件中定义值,它将如何影响编译

#define value in separate file, how will it affect compilation?

本文关键字:何影响 编译 影响 单独 文件 定义      更新时间:2023-10-16


我正在尝试做类似的事情(在多个文件中(:

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文件的重新编译。然而,您应该指望的效果是,标头的所有依赖项都将重新生成。