背景
最近项目中经常调用第三方库、带头文件、lib和dll的库,需要使用cmake进行项目管理,之前一直比较糊涂这方面,在这里做一个整理总结
编译汇编过程
静态链接方式:
把lib里面编译好的东西(函数、变量等),直接加入到你的执行程序中,缺点是占空间
动态链接方式:
提供一个dll, 在执行到这个dll包括的函数的时候,才会调用这个dll。优点是省空间,多个程序用一个dll
配置过程
两者都需要头文件,头文件类似是打包好的库的外部接口,在项目配置的时候,需要把头文件目录加入到项目的包含目录里
vs在进行路径检索的时候,会从自己的项目的包含目录开始找,所以要把头文件的目录放入,头文件里面的路径一般写的都是相对路径,这样才不会错
一般的配置流程:
步骤 | 作用 |
---|---|
把头文件目录放入项目包含目录 | 可以在项目中引用相应的头文件、函数 |
把库目录(lib)放入项目库目录、把库的名字,放入附加依赖项 | 告诉项目需要XX.lib,vs在库目录里找相应的lib |
把dll放到项目根目录 | VS在执行的时候,会找dll,找的目录从项目的根目录开始,也会找系统的目录 |
VS对已有项目打包
原理:
之前写c++项目,都是可执行文件,比如一个main函数,比如一个qt程序界面,现在希望这个项目不去执行,只作为一个包来使用
打包成dll:参考博客1 参考博客2
主要步骤其实就是把vs项目的输出项变成输出dll,然后要写好定义的宏文件,作为外界调用你函数的头文件,告诉外界函数名是什么
cmake对已有项目打包
cmake配置项目的时候,经常会需要对已有的打包成lib,供可执行项目调用,或者调用第三方库
主项目cmakelist:
子项目cmakelist: