如何在make命令行中指定mpicxx的头文件搜索目录以编译CUDA示例
你可以通过在make命令行直接传入编译相关的约定变量来指定头文件搜索路径,操作步骤如下:
先确认你本地解压的
libopenmpi-dev中mpi.h的实际路径,假设你将deb包解压到了$HOME/openmpi目录,可通过以下命令查找:find $HOME/openmpi -name "mpi.h"
假设查找结果为$HOME/openmpi/usr/include/mpi.h,那么需要指定的头文件路径就是$HOME/openmpi/usr/include。执行make命令时传入头文件路径参数:
make CPPFLAGS="-I$HOME/openmpi/usr/include"
如果仅需要给C++编译器传递参数,也可以替换为:make CXXFLAGS="-I$HOME/openmpi/usr/include"
原理说明
CPPFLAGS是GNU Make约定的预处理器通用参数变量,CXXFLAGS是C++编译器专属参数变量,命令行传入的这类变量优先级高于Makefile内部定义的默认值,传入的-I参数会自动追加到mpicxx的编译参数中,不会覆盖Makefile原有指定的../../common/inc搜索路径。
额外注意事项
仅指定头文件路径只能解决编译阶段的报错,链接阶段还需要指定MPI的库文件路径,否则还会出现找不到MPI相关函数的报错,完整的编译命令建议写成:make CPPFLAGS="-I$HOME/openmpi/usr/include" LDFLAGS="-L$HOME/openmpi/usr/lib/x86_64-linux-gnu -Wl,-rpath=$HOME/openmpi/usr/lib/x86_64-linux-gnu"
其中-L指定编译时的库搜索路径,-Wl,-rpath指定运行时的动态库搜索路径,路径需要替换为你本地libmpi.so所在的实际目录。
运行生成的MPI程序前,还需要将动态库路径添加到环境变量中:export LD_LIBRARY_PATH=$HOME/openmpi/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
内容的提问来源于stack exchange,提问作者zzzhhh

