加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

cmake配置引入外部动态dylib or so or dll文件

发布时间:2020-12-13 21:22:24 所属栏目:Windows 来源:网络整理
导读:以前写java的时候,想要引入外部一个jar包,直接在pom.xml配置依赖就可以,写c++也可以在CMakeList.txt进行配置target_link_libraries配置既可以,下面也还是通过一个demo进行说明,把A项目打包成dylib,在B项目中引用: 下面直接看A项目逻辑,在A项目中我写

以前写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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读