我正在尝试编译一些CUDA代码,并希望显示编译器警告。与以下命令等价:
g++ fish.cpp -Wall -Wextra
除了NVCC不理解这些,你必须通过它们:
nvcc fish.cu --compiler-options -Wall --compiler-options -Wextra
nvcc fish.cu --compiler-options "-Wall -Wextra"
我更青睐后一种形式,但实际上,这并不重要。
考虑到这个CMakeLists.txt文件(一个非常简化的例子):
cmake_minimum_required(VERSION 3.9)
project(test_project LANGUAGES CUDA CXX)
list(APPEND cxx_warning_flags "-Wall" "-Wextra") # ... maybe others
add_compile_options("$<$<COMPILE_LANGUAGE:CUDA>:--compiler-options ${cxx_warning_flags}>")
add_executable(test_cuda fish.cu)
但是这个扩展到:
nvcc "--compiler-options -Wall" -Wextra ...
显然这是错误的。(省略生成器表达式周围的引号只会让我们陷入破碎的扩展地狱。)
... 跳过几千次 Monte Carlo 编程迭代 ...
我得到了这个宝石:
set( temp ${cxx_warning_flags} )
string (REPLACE ";" " " temp "${temp}")
set( temp2 "--compiler-options \"${temp}\"" )
message( "${temp2}" )
这将会打印出一些看起来鼓舞人心的内容。
--compiler-options "-Wall -Wextra"
但随后
add_compile_options("$<$<COMPILE_LANGUAGE:CUDA>:${temp2}>")
扩展为:
nvcc "--compiler-options \"-Wall -Wextra\"" ...
我不知所措;我是否走到了死路?或者我错过了一些关键的标点组合?