CMake include_directories和add_subdirectory之间的区别?

时间:2012-10-06 16:49:07

标签: c++ cmake thrift

我正在学习构建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?当所述目录的内容是根级别时,为什么不需要这个附加文件?

2 个答案:

答案 0 :(得分:9)

include_directories()用于添加标题搜索路径(-I标记),而add_subdirectory()在这种情况下没有任何区别。

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

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

答案 1 :(得分:0)

add_subdirectory(source_dir)用于向构建中添加一个子目录。 source_dir中还有一个CMakeLists.txt文件。 CMake将立即处理指定源目录中的此CMakeLists.txt文件,然后再继续执行当前输入文件中的处理。

include_directories(dir):将给定目录添加到编译器用来搜索包含文件的目录中。这些目录被添加到当前CMakeLists文件的目录属性INCLUDE_DIRECTORIES中。