分享

c++ cmake 生成静态/动态库

 馒头的人生 2018-01-23

新建工程t3,t3的目录结构如下:

  1. t3  
  2. ├── build  
  3. ├── CMakeLists.txt  
  4. └── lib  
  5.     ├── CMakeLists.txt  
  6.     ├── hello.c  
  7.     └── hello.h  

t3/lib下的hello.c和hello.h用来生成库文件。


现在先来编写t3工程目录下的CMakeLists.txt文件:

  1. CMAKE_MINIMUM_REQUIRED(VERSION 2.8)  
  2. PROJECT(HELLOLIB)  
  3. ADD_SUBDIRECTORY(lib)  

添加子目录lib


然后编写lib下的CMakeLists.txt文件:

  1. SET(LIBHELLO_SRC hello.c)  
  2.   
  3. #添加动态库  
  4. ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})  
  5. #添加静态库  
  6. ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC})  
  7.   
  8. #生成动态库的版本号  
  9. SET_TARGET_PROPERTIES(hello PROPERTIES VERSION 1.2 SOVERSION 1)  
  10. #将静态库重新命名为hello  
  11. SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")  
  12.   
  13. #安装静态库和动态库  
  14. INSTALL(TARGETS hello   hello_static   
  15.     LIBRARY DESTINATION lib   
  16.     ARCHIVE DESTINATION lib)  
  17. #安装hello.h  
  18. INSTALL(FILES hello.h DESTINATION include/hello)  

//hello.c

  1. #include "hello.h"  
  2. void HelloFunc()  
  3. {  
  4.     printf("Hello World\n");  
  5.   
  6. }  


//hello.h

  1. #ifndef HELLO_H  
  2. #define HELLO_H  
  3.   
  4. #include <stdio.h>  
  5.   
  6.   
  7. void HelloFunc();  
  8.   
  9. #endif  


然后构建:

  1. cmake -DCMAKE_INSTALL_PREFIX=/tmp ..  
  2. make   
  3. make install  


查看/tmp目录下的lib目录和include目录的目录结构:

  1. lib/  
  2. ├── libhello.a  
  3. ├── libhello.so -> libhello.so.1  
  4. ├── libhello.so.1 -> libhello.so.1.2  
  5. └── libhello.so.1.2  

  1. include/  
  2. └── hello  
  3.     └── hello.h  

说明所有动态库和头文件都已经安装到了/tmp目录下了。










    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多