【发布时间】:2021-11-23 21:38:31
【问题描述】:
我有一个运行良好的 C MPI 程序,但我的挑战是使用 Makefile 编译它。 C 文件名为 frequencyMPI.c,我已经起草了名为 makefile.frequencyMPI 的 Make 文件。 makefile 在 Linux 终端上成功编译,但我不知道如何运行它。我的问题是如何运行它以及它是否正确。 Makefile的内容如下:
all: program
program: frequencyMPI.o
mpicc frequencyMPI.o -o program
frequencyMPI.o: frequencyMPI.c
mpicc -c frequencyMPI.c -o frequencyMPI.o
clean:
rm -f frequencyMPI.o program core *~
【问题讨论】:
-
1. “成功编译的makefile”是什么意思?你不能编译 Makefiles...你是运行
make还是gmake,用-f makefile.frequencyMPI指定你的 Makefile? 2. 你有没有考虑过使用 CMake,让它为你生成 Makefile? Here 是关于如何做到这一点的解释。如果相关库不在包含路径中,它还会负责查找相关库。 3. 确定要运行 mpicc 包装器而不是直接编译吗? -
我编译成功的意思是当我输入
make -f makefile.frequencyMPI时没有报错 -
在包含示例时请使用块代码格式(例如,将所有行缩进 4+ 个空格)。如上所述,您不会“编译 makefile”;你运行
make,它使用makefile中的指令来构建你的软件。上面的 makefile 构建了一个名为program的程序。您是否尝试运行该程序?如果问题是它不起作用,那么我们需要知道,你输入了什么?你遇到了什么错误? -
使用
make -f makefile.frequencyMPI运行makefile 后,它会在目录中生成frequencyMPI.o。我尝试使用./frequencyMPI.o运行它,它说权限被拒绝然后我尝试sudo ./frequencyMPI.o然后它说找不到命令。通常,当我在终端上使用mpicc编译时,我使用mpirun -np 3 ./frequencyMPI.o运行,但是对于一个可执行文件,我不知道如何执行它以知道它是否正确。其次,我的程序不是命名为program,而是命名为frequencyMPI.c -
就术语而言,您的程序不是
frequencyMPI.c。这就是您的程序的源代码。此外,frequencyMPI.o也不是程序,也不能从命令行运行,它是一个 目标文件,代表源代码的编译版本。然后,您必须将该目标文件链接 到您在此处命名为program的程序或可执行文件。然后就可以运行可执行文件了。