0
我已经写了下面的突破性的GPU供电应用:CMake的3.X + CUDA - 编译捣毁
int main() { return 0; }
,我尝试使用CMake的构建它。这是我的CMakeLists.txt
文件:
cmake_minimum_required(VERSION 2.8)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} " -std=c++11")
find_package(CUDA QUIET REQUIRED)
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} " -std=c++11")
cuda_add_executable(a a.cu)
有了这个文件,因为某些原因,编译失败;它看起来像(尽管我不确定),原因是CMake让NVCC使用CUDA包含目录两次。其结果是:
/home/joeuser/opt/cuda/bin/nvcc -M -D__CUDACC__ /home/joeuser/src/kt3/a.cu -o /home/joeuser/src/kt3/CMakeFiles/a.dir//a_generated_a.cu.o.NVCC-depend -ccbin /usr/bin/ccache -m64 --std c++11 -Xcompiler ,\"-g\" -std=c++11 -DNVCC -I/home/joeuser/opt/cuda/include -I/home/joeuser/opt/cuda/include
nvcc fatal : redefinition of argument 'std'
CMake Error at a_generated_a.cu.o.cmake:207 (message):
Error generating
/home/joeuser/src/kt3/CMakeFiles/a.dir//./a_generated_a.cu.o
你可能会问,为什么我的MWE是不是更简洁。如果我不使用C++ 11,为什么需要上面的那些选项设置行?那么,如果我删除它们,我仍然会得到双重包含,但是早期的失败涉及到ccache,我可能会问另一个问题。
那么问题其实是双重包含,还是别的?我该怎么做?
其他信息:
- 我没有这台机器上的根。
- CMake版本:3.3.2。
- 分布:Fedora 22(对不起,我无法提供帮助;但我似乎也在Debian Stretch上获得了这个)。
- CUDA安装位置:
$HOME/opt/cuda
,其二进制目录位于$PATH
。 - 在另一个系统上,使用不同的配置和发行版(Fedora 20,CUDA 7.5但在另一个本地目录中,可能存在其他差异),我做而不是得到此行为。
我已经解决了此问题,但您可能是对的,所以我会接受,但其他用户 - 请注意,此答案不是100%验证... – einpoklum