如何在make的命令行选项中指定mpicxx的include目录?
How to specify include directory of mpicxx in the command line option of make?
我正在尝试通过 运行 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 权限,我为 libopenmpi-dev
包下载了一个 deb 文件(使用 apt-get download
命令)并将它解压到我的用户 space 的某个地方(使用dpkg -x
命令)。然而,正如我们所看到的,mpicxx
试图在 ../../common/inc
中找到 mpi.h
,这不是我在我的用户 space 中安装 libopenmpi-dev
的地方(我没有注意,直到我安装了这个包。我的错)。所以我需要以某种方式告诉 mpicxx
在另一个目录中找到 mpi.h
。我知道有一个 -I
选项可以告诉 make
其他包含目录在哪里,但是这个选项不适用于 mpicxx
。我不知道如何将目录信息从 make
的命令行传递到 mpicxx
。你能教我在 make
的命令行中应该使用什么选项来指定 mpicxx
使用的包含目录吗?当然,我可以手动将安装的 libopenmpi-dev
包复制到 ../../common/inc
以适应 CUDA 示例中的原始设置,但我想做一些很酷的事情并学习一些新东西,所以我在这里问。提前谢谢你教我。
环境:
- 远程 Linux,核心版本为 5.8.0。我不是超级用户。
- CUDA 版本:11.2
- CPU:英特尔酷睿 i9-10900K
- gcc 版本: (Ubuntu 10.2.0-13ubuntu1) 10.2.0
- make 版本:GNU Make 4.3,为 x86_64-pc-linux-gnu
构建
- MPI 版本:4.0.3
Makefile 中的 include 目录与 -I
一起保存在变量 INCLUDES
中。所以,如果我们能以某种方式将安装在我的用户 space 中的 mpi 的包含目录转移到这个变量,我们就完成了。因此,问题简化为如何将用户定义的值从 make
的命令行传输到 Makefile 的变量中,并在已定义的情况下覆盖它,正如问题中明确提出的那样。
幸好make
提供了这个命令行选项:VAR=value
,所以回答我问题的选项是
make INCLUDES=-I/path/to/mpi/include/in/my/user/space
我正在尝试通过 运行 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 权限,我为 libopenmpi-dev
包下载了一个 deb 文件(使用 apt-get download
命令)并将它解压到我的用户 space 的某个地方(使用dpkg -x
命令)。然而,正如我们所看到的,mpicxx
试图在 ../../common/inc
中找到 mpi.h
,这不是我在我的用户 space 中安装 libopenmpi-dev
的地方(我没有注意,直到我安装了这个包。我的错)。所以我需要以某种方式告诉 mpicxx
在另一个目录中找到 mpi.h
。我知道有一个 -I
选项可以告诉 make
其他包含目录在哪里,但是这个选项不适用于 mpicxx
。我不知道如何将目录信息从 make
的命令行传递到 mpicxx
。你能教我在 make
的命令行中应该使用什么选项来指定 mpicxx
使用的包含目录吗?当然,我可以手动将安装的 libopenmpi-dev
包复制到 ../../common/inc
以适应 CUDA 示例中的原始设置,但我想做一些很酷的事情并学习一些新东西,所以我在这里问。提前谢谢你教我。
环境:
- 远程 Linux,核心版本为 5.8.0。我不是超级用户。
- CUDA 版本:11.2
- CPU:英特尔酷睿 i9-10900K
- gcc 版本: (Ubuntu 10.2.0-13ubuntu1) 10.2.0
- make 版本:GNU Make 4.3,为 x86_64-pc-linux-gnu 构建
- MPI 版本:4.0.3
Makefile 中的 include 目录与 -I
一起保存在变量 INCLUDES
中。所以,如果我们能以某种方式将安装在我的用户 space 中的 mpi 的包含目录转移到这个变量,我们就完成了。因此,问题简化为如何将用户定义的值从 make
的命令行传输到 Makefile 的变量中,并在已定义的情况下覆盖它,正如问题中明确提出的那样。
幸好make
提供了这个命令行选项:VAR=value
,所以回答我问题的选项是
make INCLUDES=-I/path/to/mpi/include/in/my/user/space