后来在使用的时候出现了问题就给搁置了, 前几个月捡了起来。
使用第三方公司的库经常出现编译不过提示各种无法解析的函数,这个倒是知道就是编译器找不到对应的函数实现,可是使用第三方库怎么会找不到第三方公司肯定是验证过得,就很无语,这次编译srpc再次遇到该问题,当时很忙于是我选择逃避这个问题。。。过了几个月后上一篇文章有人再问,正好我那个时候没那么忙了,于是我下定决心要搞定这个问题,功夫不负有心人这次我成功了。
其实在使用第三方库的时候,也就是第三方库的例子的时候,我经常会漏掉一个文件CMakeLists.txt文件,因为不懂makefile,也不懂cmake所以这个文件我看的时候是很抗拒的,但是这个文件确是我搞定使用srpc库成功的关键。
首先看看srpc文件路径下的tutorial文件夹中的CMakeLists.txt文件:
一堆应该是找依赖环境的cmake语法我选择忽略因为上一篇已经编译过了,环境应该是配好了,接下来应该关心如何生成exe:
这段代码引起了我的注意其中add_executable感觉很像生成exe的命令,百度一下:
Cmake命令之add_executable介绍 - 简书命令格式add_executable ( [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] [source...https://www.jianshu.com/p/19765d4932a4确实和我猜想的一样那么可以看的出来这行代码就是解决问题的关键因素了很明显四个参数从上面这篇文章中可以看到有介绍:
第一个参数:可执行目标文件的名字
第二个参数:构建可执行目标文件所需要的源文件
第三个第四个参数应该是protobuf的依赖
第二个参数就是tutorial文件夹中的所有文件
可以看出src是在遍历TUTORIAL_PB_LIST这个变量在看看下图
这个变量是手动写好的也就是tutorial文件夹下的所有教程文件
所以这个foreach是在遍历生成exe!这个foreach里面还有一个关键字是非常有用的
百度一下:
cmake学习笔记之add_library、target_link_libraries和link_directories - 大老虎打老虎 - 博客园cmake是Linux(这里默认是Ubuntu系统)下常使用的编译C++的工具,而使用cmake就需要先在CmakeLists.txt文件中对编译规则进行。这里介绍常用的三种指令add_libraryhttps://www.cnblogs.com/wangshaowei/p/11324100.html target_link_libraries:该指令的作用为将目标文件与库文件进行链接
终于知道为啥编译一个小小的例子都编不过缺库!
可以看到这个变量有三种值,第一个是苹果,第二个是windows第三个应该是linxu 也就是说我们要把他后面一串库给链接上才能编译过,这些名字百度一下就能找到,我就不细聊了