Windows下编译Castro库如何不修改代码解决M_PI未声明报错
编译Castro Sedov用例报
M_PI未定义的低侵入修复方案 所有方案均不需要修改Castro核心源码、不需要逐个给源文件加预处理宏:
- 零文件修改方案:命令行传参编译
进入....Castro/Exec/hydro_tests/Sedov目录,依次执行以下命令:
提前执行make clean make DEFINES+="-D_USE_MATH_DEFINES"make clean是为了清空之前编译失败生成的中间缓存,避免旧文件导致报错残留。 - 永久本地配置方案:修改当前用例的GNUmakefile
打开当前目录下的GNUmakefile,在最后一行include $(CASTRO_HOME)/Exec/Make.Castro的上方,添加一行配置:
保存后执行DEFINES += -D_USE_MATH_DEFINESmake clean && make即可,后续在该目录下编译不需要再额外加参数。该修改仅作用于当前Sedov测试用例,不会改动Castro库的全局代码。
生效逻辑
Castro使用AMReX的构建体系,DEFINES是构建系统预留的全局编译宏传参位,传入的-D_USE_MATH_DEFINES会被自动追加到所有C/C++源文件的编译指令中,等价于给所有待编译文件全局添加了#define _USE_MATH_DEFINES定义,满足Windows环境下math.h头文件导出M_PI常量的前置要求,直接解决报错。
若执行后仍存在相同报错,可检查系统环境变量的编译器路径优先级,确认
COMP=gnu配置下实际调用的是MinGW g++而非MSVC的cl.exe,两类编译器均兼容该宏定义参数,不会出现参数不识别的问题。
内容的提问来源于stack exchange,提问作者User123
相关产品推荐
相关产品推荐

