我正在学习构建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 回答
include_directories()
用于添加 Headers 搜索路径(-I
标志),add_subdirectory()
在这种情况下没有区别 .我想,您需要在
add_executable()
或add_library()
调用中列出来自gen-cpp文件夹的* .cpp文件,您希望在这些文件中使用这些符号 .或者,您可以将所有thrift源编译到库中并将其与您的代码链接 .