在 AC_CHECK_HEADER 之前更改编译器不会更改预处理器
Changing compiler before AC_CHECK_HEADER doesn't changing Preprocessor
我正在为具有一些依赖项的库编写 configure.ac
脚本。依赖项之一是需要 MPI 的库。
我正在使用 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]
...
现在配置只抛出一个警告,并继续编译器的结果,但我很迂腐,想解决这个问题,这样我的用户就不会认为这是他们的系统、构建设置等问题.
我环顾四周,没有找到一种方法来重置预处理器命令以使其正常工作。我错过了什么吗?
显然 CXXCPP
用作 运行 C++ 预处理器编译器 (source) 的命令,所以我修改了我的配置脚本:
...
ACX_MPI([], [AC_MSG_ERROR([Cannot find an MPI C++ compiler wrapper.])])
CXX="$MPICXX"
CXXCPP="$CXX -E"
LIBS="$MPILIBS $LIBS"
CPPFLAGS="-I$with_mylibrary_path/include $CPPFLAGS"
AC_CHECK_HEADER([mylibrary.h], [], [works=no]
...
警告消失了。
您可以尝试听取 ACX_MPI
作者的建议并改用 AC_TRY_COMPILE
...
dnl We have to use AC_TRY_COMPILE and not AC_CHECK_HEADER because the
dnl latter uses $CPP, not $CC (which may be mpicc).
顺便说一句 AX_MPI
宏似乎是 ACX_MPI
.
的更新版本(但没有什么不同)
我正在为具有一些依赖项的库编写 configure.ac
脚本。依赖项之一是需要 MPI 的库。
我正在使用 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]
...
现在配置只抛出一个警告,并继续编译器的结果,但我很迂腐,想解决这个问题,这样我的用户就不会认为这是他们的系统、构建设置等问题.
我环顾四周,没有找到一种方法来重置预处理器命令以使其正常工作。我错过了什么吗?
显然 CXXCPP
用作 运行 C++ 预处理器编译器 (source) 的命令,所以我修改了我的配置脚本:
...
ACX_MPI([], [AC_MSG_ERROR([Cannot find an MPI C++ compiler wrapper.])])
CXX="$MPICXX"
CXXCPP="$CXX -E"
LIBS="$MPILIBS $LIBS"
CPPFLAGS="-I$with_mylibrary_path/include $CPPFLAGS"
AC_CHECK_HEADER([mylibrary.h], [], [works=no]
...
警告消失了。
您可以尝试听取 ACX_MPI
作者的建议并改用 AC_TRY_COMPILE
...
dnl We have to use AC_TRY_COMPILE and not AC_CHECK_HEADER because the
dnl latter uses $CPP, not $CC (which may be mpicc).
顺便说一句 AX_MPI
宏似乎是 ACX_MPI
.