我正在学习构建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?当所述目录的内容为根级别时,为什么不需要此附加文件?
Jie*_*Yin 12
add_subdirectory(source_dir) 用于向构建添加子目录。source_dir 中还有一个 CMakeLists.txt 文件。指定源目录中的这个 CMakeLists.txt 文件将被 CMake 立即处理,然后在当前输入文件中的处理继续超出此命令。
include_directories(dir) :将给定的目录添加到编译器用于搜索包含文件的目录中。这些目录被添加到当前 CMakeLists 文件的目录属性 INCLUDE_DIRECTORIES。
arr*_*owd 10
所述include_directories()用于添加报头搜索路径(-Iflag)和add_subdirectory()将在这种情况下没有区别.
我想,您需要列出gen-cpp文件夹中的*.cpp文件add_executable()或add_library()调用,您希望这些文件符号.
或者,您可以将所有thrift源编译到库中并将其与您的代码链接.