2016-01-07 18 views
0

我想用'-arch = sm_12'来编译CUDA,但cmake/make的行为很奇怪。使用cmake编译cuda只能在调用两次之后才起作用

我有以下的CMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

PROJECT(测试)

FIND_PACKAGE(CUDA REQUIRED)

CUDA_ADD_EXECUTABLE(测试prog.cu)

SET(CUDA_NVCC_FLAGS“-arch = sm_12”)

SET(CUDA_NVCC_FLAGS $ {} CUDA_NVCC_FLAGS CACHE STRING “倒逼” FORCE)

但 'cmake的../src & &使' 导致对sm_20一个可执行文件。 该标志似乎被忽略。

编辑:如果我再次调用'make'(CMakeListss.txt没有任何修改),它使用标志。 - 但只有当我强制标志缓存(最后一行)

我做错了什么?

编辑:再次检查后:我必须调用'make'两次才能正常工作。有人知道这种行为吗?

+0

不详细更改,您添加/不添加的标志更改行为。 – usr1234567

+0

不是cmake专家,但不是由cmake命令生成的CMakeLists.txt?看起来您想要为您正在使用的机器预先设置CUDA_NVCC_FLAGS的工具链文件。我认为'cmake ../src -DCUDA_NVCC_FLAGS =“ - arch = sm_12”&& make'是推荐行为的推荐方式。 – jefflarkin

+0

@jefflarkin:不,完全没有。 CMakeLists.txt控制CMake,可与Makefiles和make相媲美。 – usr1234567

回答

1

inJeans是正确的:

FindCUDA-docs的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:“

相关问题