我有一个基于cuda10.1,qt5的项目。我使用cmake来管理编译。但是,相同的cmake脚本在Windows中可以正常工作,但是在Linux中,编译.cu文件时出现错误“未知选项'fPIC'”。我查看了makefile,然后发现传递给nvcc编译器的额外错误标志“ -fPIC”。经过数小时的测试,我发现链接qt5库将自动传递额外的fPIC标志,从而导致此错误。我不知道这是cmake的错误还是功能?
cmake_minimum_required(VERSION 3.10)
project(PyPhysLeo LANGUAGES CXX CUDA)
find_package(Qt5 COMPONENTS Core Widgets)
if(Qt5_FOUND)
message("Find QT5")
link_libraries(Qt5::Widgets Qt5::Core Qt5::Gui)
endif()
set(CMAKE_CXX_STANDARD 14 CACHE STRING "CXX STANDARD VERSION 11,14,17")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_CUDA_SEPARABLE_COMPILATION ON CACHE BOOL "DEFAULT SET SEPERABLE COMPILATION MODE")
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -arch=sm_60")
include_directories(${CMAKE_CUDA_TOOLKIT_INCLUDE})
add_executable(test test.cu)
如果您在cmake脚本上尝试使用任何示例cuda代码,则会收到“ nvcc致命”错误,因为它无法识别fPIC标志。
答案 0 :(得分:0)
qt5.cmake存在问题。感谢@Robert Crovella对相关信息gitlab.kitware.com/cmake/cmake/issues/16915进行评论。没有完美的解决方案。但是也许您可以将项目分为库和可执行子项目。尝试将所有.cu文件放入库子项目中,仅将qt5链接到可执行子项目中。这是避免此问题的一种方法。否则,您可以尝试修改qt5.cmake定义的变量,请参考cmake issue 16915。