以前写java的时候,想要引入外部一个jar包,直接在pom.xml配置依赖就可以,写c++也可以在CMakeList.txt进行配置target_link_libraries配置既可以,下面也还是通过一个demo进行说明,把A项目打包成dylib,在B项目中引用:
下面直接看A项目逻辑,在A项目中我写一个偶数相加的方法打包,其基本文件见如下:
CMakeLists.txt build evenplus.cpp evenplus.h
其中有一个头文件和一个源文件,里面的逻辑如下
evenplus.h:
int evenadd(int);
evenplus.cpp:
#include "evenplus.h"
#include <iostream>
int evenadd(int n){
int sum=0;
for(int i=0;i<n;i++){
if(i%2==0){
sum+=i;
}
}
return sum;
}
CMakeLists.txt文件见如下:
cmake_minimum_required(VERSION 3.10)
project(evenplus)
set(CMAKE_CXX_STANDARD 11)
add_library(evenplus SHARED evenplus.h evenplus.cpp)#增加一个生成一个库文件,就是生成dylib文件,自动生成lib的格式
#add_executable(result main.cpp) #生成一个可执行的文件
#target_link_libraries(result evenplus)
在build文件夹下面使用 cmake.. && make 进行编译,就会生成libevenplus.dylib,
再看B项目CMakeLists.txt的文件:
cmake_minimum_required(VERSION 3.10)
project(cmakedemo)
set(CMAKE_CXX_STANDARD 11)
#引入头文件环境变量目录,cpp或者h文件中#include会自动去搜索这些头文件
include_directories(/Users/zhoumeixu/Documents/cmakedemoa)
#引入dylib 或者 dll so文件环境目录,自动去搜索该目录下的相对于的dylib so dll文件
link_directories(/Users/zhoumeixu/Documents/cmakedemoa/build)
add_subdirectory(addlib) #包含子目录下面的文件
add_executable(cmakedemo main.cpp) #生成一个可执行文件。
target_link_libraries(cmakedemo addliblibrary libevenplus.dylib)
再看main.cpp :
#include <iostream>
#include "acclib/library.h"
#include <string>
#include "cmakedemoa/evenplus.h"
using namespace std;
int main() {
int n=10;
int ans=acc_add(n);
cout<<"1+......+"<<n<<" = "<<ans<<endl;
int even_sum= evenadd(n);
cout<<"偶数相加的结果是"<<endl;
cout<<"1+....+"<<n<<"="<<even_sum<<endl;
return 0;
}
就这样引进来就可以用:
1+......+10 = 45
偶数相加的结果是
1+....+10=20