继续完善Hello World,建立它的共享库, 包括静态库和动态库。
本节的任务:
1,建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc
向终端输出Hello World字符串。
2,安装头文件与共享库。
3, 编写一个程序使用创建的共享库(静态库和动态库)。
cd /home/ccj/CMakeDemo
mkdir t3
cd /backup/cmake/t3
mkdir lib
在t3目录下建立CMakeLists.txt,内容如下:
PROJECT(HELLOLIB)
# 通过在主工程文件CMakeLists.txt中修改ADD_SUBDIRECTORY (lib) 指令来指定一个编译输出位置;
# 指定本工程中静态库libhello.so生成的位置,即 build/lib;
ADD_SUBDIRECTORY(lib)
# 也可以通过变更为其他的位置,如
# ADD_SUBDIRECTORY(lib lib_new)
# 则,静态库libhello.so生成的位置变为 build/lib_new;
在lib目录下建立两个源文件hello.cpp与 hello.h
hello.cpp内容如下:
#include "hello.h"
using namespace std;
void HelloFunc(){
cout << "Hello World/n";
}
hello.h内容如下:
#ifndef HELLO_H
#define HELLO_H
#include <stdio.h>
void HelloFunc();
#endif
在lib目录下建立CMakeLists.txt,内容如下:
注意: 这里我们将Section 7之前的CMakeLists.txt中应有的内容提供如下:
SET (LIBHELLO_SRC hello.cpp)
# SET (LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
# three kinds of libraries:
# 1. shared, i.e., dynamic library,动态库文件扩展名常为 "*.so";
# 2. static, i.e., static library, 静态库文件扩展名常为 "*.a";
# 而且,我们通常希望静态库和动态库文件名保持一致,只是扩展名不同;
# 3. module, this parameter is valid only when dyld is supported;
# otherwise, will be considered as shared
# 添加动态库,关键词为shared,你不需要写全libhello.so,
# 只需要填写hello即可,cmake系统会自动为你生成 libhello.X
ADD_LIBRARY (hello SHARED ${LIBHELLO_SRC})