-5

我正在尝试通过make在示例的基本文件夹中运行来构建所有 CUDA 示例。其中一个示例需要mpi.h,但系统没有它,这会导致错误:

make[1]: Entering directory '$HOME/cuda_samples/samples/0_Simple/simpleMPI'
/bin/mpicxx -I../../common/inc  -o simpleMPI_mpi.o -c simpleMPI.cpp
simpleMPI.cpp:25:10: fatal error: mpi.h: No such file or directory
   25 | #include <mpi.h>
      |          ^~~~~~~
compilation terminated.
make[1]: *** [Makefile:371: simpleMPI_mpi.o] Error 1

因为我没有root权限,所以我下载了一个deb文件libopenmpi-dev包(使用apt-get download命令)并将它解压到我的用户空间中的某个地方(使用dpkg -x命令)。但是,正如我们所看到的,mpicxx尝试查找mpi.hin ../../common/inc,这不是我libopenmpi-dev在我的用户空间中安装的位置(直到我安装了软件包,我才注意到这一点。我的错)。所以我需要以某种方式告诉在另一个目录mpicxx中查找。mpi.h我知道有一个-I选项可以告诉make其他包含目录在哪里,但是这个选项不适用于mpicxx. 如何将目录信息make从命令行传递mpicxx到我的知识范围之外。你能教我应该使用什么选项吗make的命令行来指定使用的包含目录mpicxx?当然,我可以手动复制已安装的libopenmpi-dev包以../../common/inc适应 CUDA 示例中的原始设置,但我想做一些很酷的事情并学习新的东西,所以我在这里问。提前谢谢你教我。

环境:

  • 核心版本为 5.8.0 的远程 Linux。我不是超级用户。
  • CUDA 版本:11.2
  • CPU:英特尔酷睿 i9-10900K
  • gcc 版本:(Ubuntu 10.2.0-13ubuntu1)10.2.0
  • 制作版本:GNU Make 4.3,为 x86_64-pc-linux-gnu 构建
  • MPI 版本:4.0.3
4

1 回答 1

0

Makefile 中的包含目录INCLUDES-I. 所以,如果我们能以某种方式将安装在我的用户空间中的 mpi 的包含目录转移到这个变量中,我们就完成了。因此,问题简化为如何将用户定义的值make从命令行传输到 Makefile 的变量中,并在已定义的情况下覆盖它,正如问题中明确提出的那样。

幸运的是make提供了这个命令行选项:VAR=value,所以回答我的问题的选项是

make INCLUDES=-I/path/to/mpi/include/in/my/user/space
于 2021-11-05T10:30:10.480 回答