Ответ 1
mpicc
- это просто обертка вокруг определенного набора компиляторов. В большинстве реализаций их обертки mpicc
понимают специальную опцию, например -showme
(Open MPI) или -show
(Open MPI, MPICH и производные), которая предоставляет полный список опций, которые обертка передает на компилятор бэкэнд.
Например, в Open MPI обертки - это программы на С++, которые читают файлы конфигурации обычного текста и строят параметры командной строки, которые затем передаются компилятору. mpicc -showme
показывает полный список таких параметров:
$ mpicc -showme
icc
-I/opt/MPI/openmpi-1.5.3/linux/intel/include
-I/opt/MPI/openmpi-1.5.3/linux/intel/include/openmpi
-fexceptions
-pthread
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-Wl,-rpath,/opt/MPI/openmpi-1.5.3/linux/intel/lib
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-L/opt/MPI/openmpi-1.5.3/linux/intel/lib
-lmpi
-ldl
-Wl,--export-dynamic
-lnsl
-lutil
(это действительно единственная строка, которую я разделил для улучшения удобочитаемости)
В этом конкретном случае Intel C Compiler icc
используется в качестве компилятора бэкэнд, но у нас также есть варианты, которые используют GCC. Вы также можете получить список параметров, необходимых для фазы заполнения (обычно называемой CFLAGS
) с помощью mpicc -showme:compile
:
$ mpicc -showme:compile
-I/opt/MPI/openmpi-1.5.3/linux/intel/include
-I/opt/MPI/openmpi-1.5.3/linux/intel/include/openmpi
-fexceptions
-pthread
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
а также список параметров, которые необходимо передать в компоновщик (известный как LDFLAGS
) с помощью mpicc -showme:link
:
$ mpicc -showme:link
-fexceptions
-pthread
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-Wl,-rpath,/opt/MPI/openmpi-1.5.3/linux/intel/lib
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib
-L/opt/MPI/openmpi-1.5.3/linux/intel/lib
-lmpi
-ldl
-Wl,--export-dynamic
-lnsl
-lutil
Они могут использоваться, например. в Makefile
, например:
...
CFLAGS += $(shell mpicc -showme:compile)
LDFLAGS += $(shell mpicc -showme:link)
...
Насколько я знаю, -showme:compile
и -showme:link
специфичны для Open MPI, а другие реализации предоставляют полный список опций при вызове с помощью -show
.
Я по-прежнему считаю, что лучше использовать mpicc
напрямую, потому что, если произойдет, что что-то в настройке MPI будет изменено, оно будет немедленно отражено в оболочке, в то время как вам придется изменить свою конструкцию script/Makefile
вручную (если вы не используете -showme:compile
и -showme:link
для автоматического получения параметров).