【问题标题】:How to force CMake to use a response file when linking CUDA on Windows?在 Windows 上链接 CUDA 时如何强制 CMake 使用响应文件?
【发布时间】:2021-08-27 22:00:19
【问题描述】:

在 Windows 上链接 CUDA 时如何强制 CMake 使用响应文件?

我一直在尝试在 Windows 上创建一个便利库 有 CUDA 的项目。目标是将几个库包装成 一。第一种方法很简单

  add_library(conv
    $<TARGET_OBJECTS:a>
    $<TARGET_OBJECTS:b>
    $<TARGET_OBJECTS:c>
    )

尝试与 nvcc 链接,但超出了 windows 命令行长度限制。即,它发出

The command line is too long.

在 Darwin 或 Linux 上没有问题。

然后我在cmake-3.20.3中发现了代码,

  NVIDIA-CUDA.cmake: set(CMAKE_CUDA_RESPONSE_FILE_FLAG "--options-file ")

这让我想知道我是否可以通过以下方式覆盖默认值 设置

  set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_LIBRARIES TRUE)

但这样做后,我发现行为没有任何变化。它仍然与nvcc链接,它仍然不使用响应文件,并且仍然导致命令行太长。

然后我尝试将链接器设置为 Windows 链接器

  set_property(TARGET conv PROPERTY LINKER_LANGUAGE CXX)

并确保拥有

--   CMAKE_CXX_USE_RESPONSE_FILE_FOR_LIBRARIES= TRUE

但是链接器仍然是 nvcc,并且没有使用响应文件。

关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: windows cmake cuda linker


    【解决方案1】:

    在 CUDA 中使用响应或选项文件的选项似乎在 CMake 中尚不可用。在current master(第 129 行):

    # FIXME: investigate use of --options-file.
    # Tell Makefile generator that nvcc does not support @<rspfile> syntax.
    set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_INCLUDES 0)
    set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_LIBRARIES 0)
    set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_OBJECTS 0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多