如何在cmake中添加lib库:

 生成lib文件 libhello.a
add_library(hello hello.cxx) # 在top level添加子目录
add_subdirectory(hello) # 在顶层添加link依赖
target_link_libraries(Test PUBLIC hello) # 添加targert依赖的头文件路径
target_include_directories(Test PUBLIC
"{PROJECT_BINARY_DIR}"
"{PROJECT_SOURCE_DIR}/hello") # test.cxx添加头文件
#include "hello.hpp"

接前篇,新增一个hello.hpp和hello.cpp的文件,期望将其打包为libhello.a被Test调用,具体操作:

  • 在test.cxx所在目录下创建hello,并在hello下分别创建hello.hpp、hello.cpp
  • void hello();
  • #include <iostream>
    #include "hello.hpp"
    void hello() {
    std::cout << "hello world" << std::endl;
    }

    在hello目录下新建CMakeLists.txt

  • add_library(hello hello.cxx)

    在顶层的CMakeLists.txt写入

  • target_link_libraries(Test PUBLIC hello)
    target_include_directories(Test PUBLIC
    "{PROJECT_BINARY_DIR}"
    "{PROJECT_SOURCE_DIR}/hello")

    test.cxx里添加头文件

  • #include <iostream>
    #include <memory>
    #include "version.hpp"
    #include "hello.hpp"
    class A {
    public:
    A() { std::cout << "create A" << std::endl; }
    ~A() { std::cout << "destroy A" << std::endl; }
    void show() { std::cout << "call A function" << std::endl; }
    };
    int main() {
    std::cout << "VERSION:" << TEST_VERSION_MAJOR << "." << TEST_VERSION_MINOR << std::endl;
    std::unique_ptr<A> a = std::make_unique<A>();
    a->show();
    hello();
    return 0;
    }

    目录结构如下:

  • ├── build
    ├── CMakeLists.txt
    ├── hello
    │ ├── CMakeLists.txt
    │ ├── hello.cpp
    │ └── hello.hpp
    ├── test.cxx
    └── version.hpp.in

    在build下执行cmake .. && cmake --build .

    Test执行结果如下:

  • VERSION:1.0
    create A
    call A function
    hello world
    destroy A

    原文链接:cmake添加lib库

如何在cmake中添加lib库的更多相关文章

  1. VS2010中添加lib库引用

    VS2010中添加lib库引用: 1 菜单  项目---> 属性--->配置属性-->链接器---->输入---附加依赖项,  加入库名,如: my_API.lib; 或是在c ...

  2. 在VS中添加lib库的三种方法

    注意: 1.每种方法也要复制相应的DLL文件到相应目录,或者设定DLL目录的位置,具体方法为:"Properties" -> "Configuration Prop ...

  3. 在vs2005中添加lib库的方法

    方法一:在用到lib的地方加上  //强烈推荐这种方法.#pragma    comment(lib,"libname.lib") 方法二:     点击菜单命令 “项目/属性”, ...

  4. QT总结第3篇:如何在QT中添加.lib,.dll还有.h文件

    因为我在工作的过程中,使用的是第三方提供的库,但是如何将这些库添加到QT的工程中,是个问题,让我恼火了很久,怎么弄都是错的. 下面,我会对这个问题,进行叙述,希望其他人第一次遇到这种问题的时候,可以轻 ...

  5. 如何在Webstorm中添加js库 (青瓷H5游戏引擎)

    js等动态语言编码最大的缺点就是没有智能补全代码,webstorm做到了. qici_engine作为开发使用的库,如果能智能解析成提示再好不过了,经测试80%左右都有提示,已经很好了. 其他js库同 ...

  6. 如何在Eclipse中添加Servlet-api.jar的方法

    方法一: 点击窗口->首选项->java->构建路径->类路径变量->新建:将你的tomcat目录下的common/lib/servlet.jar加进来.如果你建立了一个 ...

  7. visual studio添加lib库

    方法1: 通过设置工程配置来添加lib库. A.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录. B.添加文件引用的lib静态库路径 ...

  8. VS中添加第三方库及相对路径设置

    原文 VS中添加第三方库及相对路径设置 对于一些第三方的SDK,一般会包含头文件(*.h),静态库文件(*.lib)和动态库文件(*.dll). 1.  文件位置:为了提高程序的可移植性,将第三库放在 ...

  9. iOS——Xcode中添加第三方库

    一.只有.h和.a文件的库 1.向项目中添加三方库文件 如果添加的第三方库只有.h和.a文件,直接把文件夹拖进项目下面,这时会弹出下面的提示框,一定要勾选下面选择的选项: 这里要注意,在Add to ...

  10. 如何在Eclipse中添加Tomcat的jar包

    原文:如何在Eclipse中添加Tomcat的jar包 右键项目工程,点击Java Build Path 点击Add Library,选择Server Runtime 选择Tomcat版本 此时就看到 ...

随机推荐

  1. Linux命令netstat查看端口使用方法

    [redis@fgedu180 ~]$ netstat -an|grep 6379 tcp 0 0 192.168.4.180:6379 0.0.0.0:* LISTEN

  2. 函数计算平台 OpenFunction 在自动驾驶领域的应用

    嘉宾 | 霍秉杰 整理 | 王新 出品 | CSDN 云原生 2022 年 5 月 10 日,在 CSDN 云原生系列在线峰会第 4 期"ApacheSkyWalking 峰会"上 ...

  3. 「模拟赛」多校 A 层联训 16

    比赛链接 A.四舍五入 虽然让找 \(i\),但枚举 \(i\) 很没前途啊,所以考虑找到所有 \(j\) 的个数 发现对于一组合法的 \(i.j\) 需要满足 \(i\in [kj,\ kj+0.5 ...

  4. Flink CDC同步MySQL数据到Iceberg实践

    介绍 Flink CDC: 捕获数据库完整的变更日志记录增.删.改等所有数据. Flink在1.11版本开始引入了Flink CDC功能,并且同时支持Table & SQL两种形式.Flink ...

  5. 十分钟配置完成Go开发环境

    本文介绍了GO环境搭建以及GOPATH.GOROOT等基本概念,希望让你少走弯路 SDK下载 如果要使用Golang,我们首先要安装Golang的SDK开发包 Golang是网友给Go语言起的另一个称 ...

  6. Struts2漏洞复现

    Struts2漏洞复现 靶场环境:/vulhub/struts2大多都是OGNL注入 是什么: Struts2是一个基于MVC设计模式的Web应用框架 识别: 1.通过网页后缀来进行判断,如.do或者 ...

  7. excel/xlsx 空值判断NaN

    从numpy导入nan类型,以此判断NaN类型

  8. JAVA 注解示例 详解

    注解(Annotation) 为我们在代码中天界信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解析注解 来使用这些数据). 注解的语法比较简单,除了@符号的使用以外, ...

  9. Java多线程设计模式之线程池模式

    前序: Thread-Per-Message Pattern,是一种对于每个命令或请求,都分配一个线程,由这个线程执行工作.它将"委托消息的一端"和"执行消息的一端&qu ...

  10. golang工具之generate

    示例: 大家经常碰到命名错误码.状态码的同时,又要同步写码对应的翻译,有没有感觉很无聊.这里举一个例子: package main ​ import "fmt" ​ // 定义错误 ...