是否可以在定义之前设置一堆变量,例如,当使用CUDA并且我写
时SET(MY_CUDA_LIBS CUDA_CUBLAS_LIBRARIES CUDA_CUFFT_LIBRARIES),
这样当
定义时FIND_PACKAGE(CUDA REQUIRED)
现在可以访问CUDA_CUBLAS_LIBRARIES
和CUDA_CUFFT_LIBRARIES
,即${CUDA_CUBLAS_LIBRARIES}
和${CUDA_CUFFT_LIBRARIES}
是相应库的路径),我可以访问类似{{1}的内容它返回${MY_CUDA_LIBS}
?
如果我这样做,这显然有效。仅使用${CUDA_CUBLAS_LIBRARIES} ${CUDA_CUFFT_LIBRARIES}
并执行CUDA_CUBLAS_LIBRARIES
,但只要有一个库有多个库,这个技巧就不再起作用了,它返回CUDA_CUBLAS_LIBRARIESCUDA_CUFFT_LIBRARIES或“没有”。
我的想法是在${${MY_CUDA_LIBS}}
的最开始定义CUDA库,然后它(远)稍后在CMakeLists.txt
中访问时自动插入相应的路径。
答案 0 :(得分:0)
从技术上讲,您应该将MY_CUDA_LIBS
视为列表。然后,以下是可能的:
set(MANY_LIBS LIB_1 LIB_2)
set(LIB_1 "/libs/lib1")
set(LIB_2 "/libs/lib2")
list(GET MANY_LIBS 0 PATH)
message(${${PATH}})
list(GET MANY_LIBS 1 PATH)
message(${${PATH}})
产生预测的以下输出:
/libs/lib1
/libs/lib2
如果您希望稍后在TARGET_LINK_LIBRARIES
中使用它,您可以在正确定义变量后执行以下操作:
foreach(libname ${MANY_LIBS})
list(APPEND MANY_LIBS_PATHS ${${libname}})
endforeach(${MANY_LIBS_PATHS})
message("${MANY_LIBS_PATHS}")
之后,MANY_LIBS_PATHS
可用于链接。