链接qt5库通过cmake原因错误自动将额外的fPIC标志传递给nvcc编译器

时间:2019-05-18 13:57:32

标签: c++ qt cmake cuda

我有一个基于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标志。

1 个答案:

答案 0 :(得分:0)

qt5.cmake存在问题。感谢@Robert Crovella对相关信息gitlab.kitware.com/cmake/cmake/issues/16915进行评论。没有完美的解决方案。但是也许您可以将项目分为库和可执行子项目。尝试将所有.cu文件放入库子项目中,仅将qt5链接到可执行子项目中。这是避免此问题的一种方法。否则,您可以尝试修改qt5.cmake定义的变量,请参考cmake issue 16915