我有一个涉及C ++和CUDA代码的项目,尤其是-对象仅源自C ++代码的二进制文件(使用常规C ++编译器进行编译)和对象仅源自CUDA代码的二进制文件(即{{1} } .cu
编译的文件。
问题是,源自C ++的目标仍然进行一些CUDA API调用,因此依赖于CUDA库。
现在,对于链接源自CUDA的二进制文件,我无需提及CUDA库。它可以很好地链接,但是对于C ++起源的库,我确实需要它们。
如何仅将Cake起源的目标告知cmake nvcc
?
或者-我是否以错误的方式考虑这个问题?
注意:我使用的是CMake> = 3.8,具有本机CUDA支持,所以我不使用link_libraries
前缀的命令。
答案 0 :(得分:1)
您可能应该定义,创建不同的目标,例如add_library
或add_executable
,然后使用target_link_libraries(target_name [PRIVATE | INTERFACE | PUBLIC]library)
。
作为一般准则,您不应在目录级别(link_libraries,include_directories等)进行操作,例如由Daniel Pfeifer在this awesome talk中撰写。