Я пишу сценарий configure.ac
для библиотеки, которая имеет несколько зависимостей. Одна из зависимостей - это библиотека, которая требует MPI.Изменение компилятора до того, как AC_CHECK_HEADER не изменяется Препроцессор
Я использую macro, чтобы обнаружить доступность MPI и использовать его определения переменных, чтобы сменить компилятор C++ на соответствующую оболочку MPI. К сожалению, это не отражается полностью, когда я выполняю команду AC_CHECK_HEADER
; тест компилятора отлично работает, но тест препроцессора терпит неудачу.
провал в config.log
(обратите внимание на тест препроцессора использует g++
вместо mpic++
):
configure:17591: checking for mpic++
configure:17607: found /opt/apps/gcc4_7/mvapich2-x/2.0.0/bin/mpic++
configure:17618: result: mpic++
configure:17636: checking for MPI_Init
configure:17636: mpic++ -o conftest -g -O2 -std=c++11 conftest.cpp >&5
configure:17636: $? = 0
configure:17636: result: yes
configure:17729: checking for mpi.h
configure:17742: mpic++ -c -g -O2 conftest.cpp >&5
configure:17742: $? = 0
configure:17743: result: yes
configure:17781: checking mylibrary.h usability
configure:17781: mpic++ -c -g -O2 -I./mylibrary/include -std=c++11 conftest.cpp >&5
configure:17781: $? = 0
configure:17781: result: yes
configure:17781: checking mylibrary.h presence
configure:17781: g++ -E -I./mylibrary/include -std=c++11 conftest.cpp
In file included from ./mylibrary/include/mylibrary.h:4,
from conftest.cpp:26:
./mylibrary/include/mylibrary.h:4:17: fatal error: mpi.h: No such file or directory
configure.ac
связанный раздел:
...
ACX_MPI([], [AC_MSG_ERROR([Cannot find an MPI C++ compiler wrapper.])])
CXX="$MPICXX"
LIBS="$MPILIBS $LIBS"
CPPFLAGS="-I$with_mylibrary_path/include $CPPFLAGS"
AC_CHECK_HEADER([mylibrary.h], [], [works=no]
...
Теперь настроить только бросает предупреждение, и продолжается с компилятора результаты, но я педантичен и хочу решить эту проблему, чтобы мои пользователи не думали, что это проблема с их системой, установкой сборки и т. д.
Я огляделся и не нашел способа сбросить команду препроцессора для этого. Я что-то упускаю?
Вам нужно сделать глубокий вдох и выяснить, что происходит, глядя на созданный robo скрипт configure, и какая точная команда выполняется, какая точная команда ДОЛЖНА выполняться, и почему она не делает что. В прошлом были аналогичные ситуации с волосами, когда у меня не было других вариантов, но чтобы вникнуть в скрипт configure и выяснить, что действительно происходит под обложками. –
Я боялся, что мне, возможно, придется это сделать. Я посмотрю, что я могу найти. –