使用CMakes CHECK_CXX_COMPILER_FLAG和nvcc / cuda

时间:2015-09-21 15:09:58

标签: cuda cmake nvcc compiler-flags

我尝试使用CUDA编译一些coda,并使用CMake生成的MakeFiles。

我想使用CHECK_CXX_COMPILER_FLAG或类似内容来检查所使用的nvcc版本是否支持给定的标志。就我而言,它是" - expt-relaxed-constexpr" (Cuda 7.5)和" - relax-constexpr" (Cuda 7?)

当然我可以比较CUDA版本,但我发现编译标志检查更加自动防故障。

是否有类似于CHECK_CXX_COMPILER_FLAG的CMake命令调用nvcc编译器而不是主机编译器?

2 个答案:

答案 0 :(得分:1)

我不知道检查特定nvcc标志的官方方法,但您可以自己编写一个宏而不是简单:

<强> CheckNvccCompilerFlag.cmake

MACRO(CHECK_NVCC_COMPILER_FLAG _FLAG _RESULT)
    EXECUTE_PROCESS(COMMAND ${CUDA_NVCC_EXECUTABLE} "${_FLAG}" ERROR_VARIABLE NVCC_OUT)
    IF("${NVCC_OUT}" MATCHES "Unknown option")
        SET(${_RESULT} 0)
    ELSE()
        SET(${_RESULT} 1)
    ENDIF()
ENDMACRO()

演示用途:

<强> CMakeList.txt

PROJECT(cuda_flag_test)
FIND_PACKAGE(CUDA)
INCLUDE(CheckNvccCompilerFlag.cmake)
CHECK_NVCC_COMPILER_FLAG("--asdf" HAS_NVCC_ASDF)
IF(HAS_NVCC_ASDF)
    MESSAGE(STATUS "asdf is supported")
ENDIF()

CHECK_NVCC_COMPILER_FLAG("--relaxed-constexpr" HAS_NVCC_RELAXED_CONSTEXPR)
IF(HAS_NVCC_RELAXED_CONSTEXPR)
    MESSAGE(STATUS "relaxed-constexpr is supported")
ENDIF()

<强>输出

...

-- Found CUDA: /opt/cuda (found version "7.0") 
-- relaxed-constexpr is supported

...

(就个人而言,我会依赖CUDA_VERSION。)

答案 1 :(得分:0)

简短的回答:是的。 NVCC将定义一个宏:__CUDACC_RELAXED_CONSTEXPR__

#ifdef __CUDACC_RELAXED_CONSTEXPR__

  do somthing

#endif