Visual Studio 2017 msvc vs nvcc __cplusplus宏不匹配

问题描述 投票:0回答:1

我使用的是Visual Studio 2017,平台工具集v141和CUDA Toolkit 9.2。我注意到在使用nvcc编译thrust :: device_vector时,不存在移动构造函数和移动赋值。原因是检查Thrust lib中__cplusplus宏的值的条件。

正如在docs中所解释的,我将C ++语言标准设置为/ std:c ++ 17并另外设置/ Zc:__ cplusplus以便在msvc中正确定义宏,即201703.但是对于由nvcc编译的文件,宏是设定为199711。

我创建了一个简单的案例来重现这个问题。

test.cuh:

#pragma once
#include <iostream>
void test();

test.粗:

#include "test.cuh"
void test()
{
    std::cout << "CU  file: " << __cplusplus << std::endl;
}

main.cpp中:

#include "test.cuh"
int main()
{
    test();
    std::cout << "CPP file: " << __cplusplus << std::endl;
    return 0;
}

输出:

CU  file: 199711
CPP file: 201703

我正在寻找适用于与FindCUDA一起使用的CMake的解决方案。

c++ cmake cuda visual-studio-2017 thrust
1个回答
2
投票

我已经设法通过将-Xcompiler / Zc:__ cplusplus传递给nvcc来将__cplusplus设置为201402。由于nvcc只支持C ++ 14,这可能是我用CUDA 9.2最好的。

© www.soinside.com 2019 - 2024. All rights reserved.