cmake nvcc致死性:当指定了OutputFile时,非链接阶段需要单个输入文件

vhmi4jdf  于 2023-05-29  发布在  其他
关注(0)|答案(1)|浏览(175)

当使用CMake 3.26.4与CUDA v12.1和Visual 16.11.25并编译.cu文件时,我得到以下错误:

1>nvcc fatal   : A single input file is required for a non-link phase when an outputfile is specified

以下是一些相关的CMake部分:

enable_language(CUDA)

add_library(${project} SHARED)

set_target_properties(${project} PROPERTIES CXX_STANDARD 17)

if (MSVC)
  target_compile_definitions(${project} PUBLIC -DBOOST_ASIO_DISABLE_CONCEPTS)
  target_compile_options(${project} PRIVATE /std:c++latest /await:strict /bigobj "/Zc:__cplusplus")
endif()

find_package(CUDAToolkit)

set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -arch=sm_60")

target_link_libraries(${project} PRIVATE CUDA::cuda_driver)

set_property(TARGET ${project} PROPERTY CUDA_SEPARABLE_COMPILATION ON)

看起来NVCC不喜欢从CXX编译器传递的任何/标志。

  • 已尝试:set(CUDA_PROPAGATE_HOST_FLAGS FALSE)。可能已弃用
  • 已尝试:删除target_compile_options并将add_compile_options$<$<COMPILE_LANGUAGE:CXX>一起使用...

有什么提示吗?谢谢!

kuarbcqp

kuarbcqp1#

因此,通过移除:

if (MSVC)
  target_compile_definitions(${project} PUBLIC -DBOOST_ASIO_DISABLE_CONCEPTS)
  target_compile_options(${project} PRIVATE /std:c++latest /await:strict /bigobj "/Zc:__cplusplus")
endif()

并将其替换为:

set(my_cxx_flags -DBOOST_ASIO_DISABLE_CONCEPTS /std:c++latest /await:strict /bigobj "/Zc:__cplusplus")

target_compile_options(${project} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${my_cxx_flags}> )

这似乎解决了这个问题。

相关问题