请求不区分头文件尖括号与引号引用的编译选项及报错解决
解决OpenMPI+deal.II+include-what-you-use编译问题
一、头文件尖括号/引号引用不兼容问题
C标准中,<header.h>会优先搜索系统指定的头文件路径,"header.h"则先搜索当前源文件所在目录,再搜索系统路径。要让编译器抹平两者差异,可通过以下编译选项实现:
使用GCC的
-iquote选项,将deal.II的config.h所在目录添加到引号搜索路径中。比如config.h位于/usr/local/dealii/include,则添加编译参数:-iquote /usr/local/dealii/include此选项会让编译器在处理
<mpi.h>时,优先搜索该目录,效果等同于用"mpi.h"引用。若
-iquote不适用,也可使用-I选项将目标目录加到系统搜索路径最前端:-I /usr/local/dealii/include不过
-iquote更贴合引号引用的语义,推荐优先使用。
二、include-what-you-use未知警告选项问题
mpicc作为GCC的包装器,会自动注入MPI相关编译选项,部分选项可能不被iwyu识别,可通过以下方式解决:
在CMake中过滤掉iwyu不支持的选项:先提取mpicc的原生编译flags,移除iwyu无法识别的警告参数,再传递给iwyu。例如:
# 获取mpicc的基础编译flags execute_process(COMMAND mpicc -show OUTPUT_VARIABLE MPICC_FLAGS) # 移除iwyu不识别的警告选项(示例,需根据实际报错调整) string(REGEX REPLACE "-Wsome-unknown-option" "" MPICC_CLEAN_FLAGS ${MPICC_FLAGS}) # 设置iwyu的调用参数 set(CMAKE_C_INCLUDE_WHAT_YOU_USE "include-what-you-use;${MPICC_CLEAN_FLAGS}")直接让编译器忽略未知警告选项:在编译flags中添加
-Wno-unknown-warning-option,此选项会让GCC(及mpicc)跳过无法识别的警告参数,避免iwyu触发报错。
内容的提问来源于stack exchange,提问作者SolidMechanicsFan
相关产品推荐
相关产品推荐

