
目标不只是能够自己能用上自己写的库让别人也能用。1.创建一个文件夹如下图所示src存放库的.cpp文件include存放库的.h文件,主程序是useHello.cpp2.往include和src里面放你的文件并且编写你的主程序引用这个库。此处略。3.编写CMakeLists.txt文件这一步比较关键我尽可能的讲明白如下图所示。注1include_directories(include)找库的头文件。add_library(hello SHARED src/hello.cpp)add_library声明需要生成一个库文件SHARED表明这是一个动态库如果不加就默认是静态库动态库的作用就是能够多个程序共用hello就是给源文件设置一个映射名故此这句代码的完整意思是给源文件生成一个名为hello的动态共享库执行这句代码会生成libhello.so这个共享动态库文件。add_executabletarget_link_libraries看之前的文章前面有介绍。install(TARGETS hello LIBRARY DESTINATION lib)这条语句当执行make install 时把之前add_library定义的hello动态库安装到指定的系统目录中TARGETS hello:声明要安装的对象是hello(也就是前面add_library生成的那个动态库)LIBRARY指定要安装的文件类型是动态共享库也就是.so文件。DESTINATION lib就是路径最终路径是/usr/local/lib其中/usr/local是默认路径lib是自己指定的默认路径可以改读者自己去查CMAKE_INSTALL_PREFIX一般是改这个。install(FILES include/hello.h DESTINATION include)这句代码同理不过他是安装.h文件到指定路径。4.编译。创建一个build文件在build文件里面执行cmake .. make。那么你会得到如下图所示。一个.so文件动态库共享文件一个可执行文件。5.执行可执行文件指令./sayhello。那么你就会得到输出的结果。6.执行sudo make install 注这条指令是在build文件下执行因为刚才编译的中间文件在这。结果如下图所示。7.这时候你可以用指令具体查看。如下图所示。8.执行sudo ldconfig。因为上一步只是安装但是系统的缓存索引并没有更新动态链接器查不到这个库。所以刷新一下缓存解决这个问题。9..h文件和.so文件已经安装到了系统那么现在需要写一个cmake文件去找到这两个文件别人在用find_package指令时Cmake会去调用这个脚本去找库。如下图所示。注find_library这是找库文件本身也就是.so文件整体意思为在xxx路径下找到xx文件如果成功找到那么就会返回文件路径给到设置的变量HEllo_LIBRARY。find_path同理。include(FindPackageHandleStandardArgs)引入cmake内置的模块里面定义了一个函数find_package_handle_standard_args().而ind_package_handle_standard_args()第一个参数Hello他是为了给find_packageHello设置的调用find_packageHelloCmake就会自动搜索Findxxxx(Hello).cmake的文件所以这里的大小写要严格匹配并且cmake会基于他生成HELLO_FOUND自动转全大写_FOUND后缀。DEFAULT_MSG cmake默认的消息提示格式找或者没找到库都会输出默认提示给你。后面那两个就是需要检查的变量前面知道这两个变量的值是路径假设都找到的前提下如果都是路径值那么就是查找成功否则不成功。如果成功HELLO_FOUND的值会设置成true否则为false。最后if一句就是赋值了不细说。(高亮这里一定要全部大写不然最后实验就会报错而且你还不知道啥原因)10.假设现在另外一个程序员想要用到我们的这个库。我们把全部打包给他然后他找到FindHello.cmake文件并且放到自己文件下于此同时他还得编译一下我们的库并且sudo make installsudo ldconfig才行。如下图所示。程序员把文件放到cmake文件下了。注意此时他是没有库的.cpp和.h文件的.它的Cmakelists可以如下图。11.最后像之前编译一个C文件执行即可。