我想使用 cmake 通过“-arch=sm_12”编译 CUDA,但 cmake/make 的行为很奇怪。
我有以下 CMakeLists.txt:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(test)
FIND_PACKAGE(CUDA REQUIRED)
CUDA_ADD_EXECUTABLE(test prog.cu)
SET(CUDA_NVCC_FLAGS "-arch=sm_12")
SET(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} CACHE STRING "Forced" FORCE)
但是“cmake ../src && make”会生成 sm_20 的可执行文件。 该标志似乎被忽略了。
编辑:如果我再次调用“make”(在 CMakeListss.txt 中没有任何修改),它将使用该标志。 - 但前提是我强制标志缓存(最后一行)
我做错了什么吗?
编辑:再次检查后:我必须调用“make”两次才能正常工作。有人知道这种行为吗?
最佳答案
inJeans 是对的:
查找 CUDA 文档 https://cmake.org/cmake/help/v3.3/module/FindCUDA.html
这是基本信息:
“请注意,在调用 CUDA_ADD_EXECUTABLE、CUDA_ADD_LIBRARY、CUDA_COMPILE、CUDA_COMPILE_PTX、CUDA_COMPILE_FATBIN、CUDA_COMPILE_CUBIN 或 CUDA_WRAP_SRCS 之前,可以在同一目录中多次更改这些标志:”
关于cuda - 使用 cmake 编译 cuda 仅在调用 make 两次后才有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34655585/