任务:
- 建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc向终端输出Hello World字符串。
- 安装头文件与共享库。
1、准备工作
在/backup/cmake目录建立t3目录
mkdir t3
建立共享库
cd t3
mkdir lib
在t3目录下建立CMakeLists.txt,内容如下:
PROJECT(HELLOLIB)
ADD_SUBDIRETORY(lib)
在lib目录下建立两个源文件 hello.c 、hello.h
hello.c内容如下:
#include "hello.h"
void HelloFunc()
{
printf("Hello World\n");
}
hello.h内容如下:
#ifdef HELLO_H
#DEFINE HELLO_H
#include <stdio.h>
void HelloFunc();
#endif
在lib目录下建立CMakeLists.txt,内容如下:
# 源码列表
SET(LIBHELLO_SRC hello.c)
# 添加动态库 libhello.so
ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})
# 添加静态库 libhello.a
ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC}) # hello_static 或者啥都行,不能是hello,因为前面添加动态库用过hello了
SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")
# 动态库版本号
# VERSION指代动态库版本, SOVERSION 指代API版本
SET_TARGET_PROPERTIES(hello PROPERTIES VERSION 1.2 SOVERSION 1)
# 安装共享库
INSTALL(TARGETS hello hello_static
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib) # 静态库要使用ARCHIVE关键字
# 安装头文件
INSTALL(FILES hello.h DESTINATION include/hello)
2、构建
采用外编译,即新建一个build目录,在build目录中
cmake -D_CMAKE_INSTALL_PREFIX=/usr ..
make
sudo make install
在build/lib目录会生成:
将头文件和共享库安装到系统目录/usr/lib和/usr/include/hello中了,不信你查一下(doge)。