首页 文章

CMake include_directories和add_subdirectory之间的区别?

提问于
浏览
18

我正在学习构建C代码的CMake,并努力学习以下概念 . 在我的根目录目录中,我有一些cpp文件和一个CMakeLists.txt,它可以在gen-cpp目录中成功生成一些thrift代码 . 我的根级别CMakeLists.txt包含:

include_directories( “路径到根”/ GEN-CPP) . (以及相关的节俭自动生成和包括 .

一切编译好,但我得到运行时动态库链接错误的未定义符号引用gen-cpp目录中定义的类 . 当我将目录中的文件移动到根级别时,它运行正常 . 我错过了什么? (我还调整了根级别cpp directorie s中的#include指向“path-to-root”/ gen-cpp) .

这是否是使用include_directory的误解,我应该使用add_subdirectory . 如果是后者,gen-cpp中的代码是否需要自己的CMakeLists.txt?当所述目录的内容是根级别时,为什么不需要此附加文件?

1 回答

  • 9

    include_directories() 用于添加 Headers 搜索路径( -I 标志), add_subdirectory() 在这种情况下没有区别 .

    我想,您需要在 add_executable()add_library() 调用中列出来自gen-cpp文件夹的* .cpp文件,您希望在这些文件中使用这些符号 .

    或者,您可以将所有thrift源编译到库中并将其与您的代码链接 .

相关问题