一、c库文件增加
增加Core.h 头文件
#函数声明
int add(int a,int b);
增加Core.cpp文件
#include "Core.h"
int add(int a, int b)
{
return a+b;
}
二、CMakeLists.txt规则增加
规则见代码
#cmake 版本要求
cmake_minimum_required(VERSION 2.8)
#增加头文件路径
include_directories(.)
#增加源文件路径
aux_source_directory(. SRC_LIST1)
#增加库目标
add_library(core SHARED ${SRC_LIST1})
三、编译生成动态库
[root@ dync_core_lib]# ls
build CMakeLists.txt Core.cpp Core.h
[root@ dync_core_lib]# cd build/
[root@ build]# cmake ..
-- The C compiler identification is GNU 5.2.1
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /root/project/dync_core_lib/build
[root@ build]# make
Scanning dependencies of target core
[100%] Building CXX object CMakeFiles/core.dir/Core.cpp.o
Linking CXX shared library libcore.so
[100%] Built target core
[root@ build]# ls
CMakeCache.txt CMakeFiles cmake_install.cmake libcore.so Makefile
四、项目使用libcore.so动态库
把Core.h增加到项目的include中
把libcore.so动态库增加到项目中
举例:
把Core.h放到项目的Include/Core中
把libcore.so放到项目的Lib中
── build
├── CMakeLists.txt
├── Include
│ ├── Core
│ │ └── Core.h
│ └── Libuv
│ ├── Libuv.cpp
│ ├── Libuv.h
│ └── UVInclude
│ ├── uv
│ │ ├── aix.h
│ │ ├── bsd.h
│ │ ├── darwin.h
│ │ ├── errno.h
│ │ ├── linux.h
│ │ ├── os390.h
│ │ ├── posix.h
│ │ ├── sunos.h
│ │ ├── threadpool.h
│ │ ├── tree.h
│ │ ├── unix.h
│ │ ├── version.h
│ │ └── win.h
│ └── uv.h
├── Lib
│ ├── libcore.so
│ └── libuv.so
└── Main.cpp
CMakeLists.txt规则
cmake_minimum_required(VERSION 2.8)
#项目名称
project(main)
#向编译单元添加包含目录的路径。这允许源文件包含来自指定目录的头文件
include_directories(Include)
#用于将指定目录下的所有源文件列表赋值给一个变量
aux_source_directory(Include/Libuv SRC_LIST1)
#从指定目录查找对应的库
find_library(LIB libuv.so ./Lib)
find_library(LIB1 libcore.so ./Lib)
if(LIB)
message("find libuv.so")
else()
message("not find libuv.so")
endif()
#添加一个可执行目标以及它的源文件
add_executable(main Main.cpp ${SRC_LIST1})
#为指定的目标添加链接库, 这里增加libuv.so库
target_link_libraries(main ${LIB} ${LIB1})
Main.cpp使用库
#include<iostream>
#include "Libuv/Libuv.h"
#include "Core/Core.h"
using namespace std;
int main(){
int result = add(1, 2);
cout<<"result:"<<result<<endl;
Libuv libuv;
libuv.Init();
string input;
while(true){
cout<<"enter cmd( input 'exit' quit process)"<<endl;
getline(cin, input);
if( input == "exit"){
cout<<"exit process"<<endl;
break;
} else
{
cout<<"unknow cmd:"<<input<<endl;
}
}
return 0;
}