我试图在配置过程中测试一些典型的cuda函数。如何在configure.ac中写入?类似于:

AC_TRY_COMPILE([],
[
__global__ static void test_cuda() {
    const int tid = threadIdx.x;
    const int bid = blockIdx.x;
    __syncthreads();
}
],
[cuda_comp=ok],[cuda_comp=no])

但是在AC语言中没有定义nvcc。我必须创建自己的m4宏吗?

最佳答案

我非常怀疑是否有可能在不重写autoconf的部分内容的情况下完全钩住AC_LANG、AC_TRY_COMPILE等一系列宏。
对你来说最保险的办法就是写一个测试。除非在多个项目中需要该测试,否则甚至不需要用m4宏包装该测试。
测试将首先检查nvcc,然后创建一些测试源文件,最后尝试使用$NVCC编译该文件。然后它需要检查编译的结果(返回代码和生成的文件),最后清理它可能生成的任何文件。
有点像

AC_ARG_VAR([NVCC], [nvcc compiler to use])
AC_PATH_PROG([NVCC], [nvcc], [no])
working_nvcc=no
if test "x$NVCC" != "xno"
the
    AC_MSG_CHECKING([whether nvcc works])
    cat>conftest.c<<EOF
    __global__ whatever() {
       ...
    }
EOF
    if $NVCC conftest.c && test_whether_output_files_are_ok
    then
        working_nvcc=yes
    fi
    rm -f conftest.c conftest.o conftest.what conftest.ever
    AC_MSG_RESULT([$working_nvcc])
fi
AM_CONDITIONAL([WORKING_NVCC], [test "x$working_nvcc" = "xyes"])

关于c - 是否可以使用autoconf检查nvcc编译?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1973846/

10-09 02:14