仅为使用某种语言编译的对象添加链接库?

时间:2018-08-28 14:44:33

标签: c++ cmake cuda linker-errors

我有一个涉及C ++和CUDA代码的项目,尤其是-对象仅源自C ++代码的二进制文件(使用常规C ++编译器进行编译)和对象仅源自CUDA代码的二进制文件(即{{1} } .cu编译的文件。

问题是,源自C ++的目标仍然进行一些CUDA API调用,因此依赖于CUDA库。

现在,对于链接源自CUDA的二进制文件,我无需提及CUDA库。它可以很好地链接,但是对于C ++起源的库,我确实需要它们。

如何仅将Cake起源的目标告知cmake nvcc

或者-我是否以错误的方式考虑这个问题?

注意:我使用的是CMake> = 3.8,具有本机CUDA支持,所以我不使用link_libraries前缀的命令。

1 个答案:

答案 0 :(得分:1)

您可能应该定义,创建不同的目标,例如add_libraryadd_executable,然后使用target_link_libraries(target_name [PRIVATE | INTERFACE | PUBLIC]library)。 作为一般准则,您不应在目录级别(link_libraries,include_directories等)进行操作,例如由Daniel Pfeifer在this awesome talk中撰写。