如何在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. tarjan 各类板子集合

    tarjan大板子(非讲解): 1.普通缩点DGA void tarjan(int x){ dfn[x]=low[x]=++cntp; q.push(x);v[x]=1; for(int i=head ...

  2. 新手入门使用pinia

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  3. 以 Kubernetes 原生方式实现多集群告警

    作者:向军涛.雷万钧 来源:2023 上海 KubeCon 分享 可观测性来源 在 Kubernetes 集群上,各个维度的可观测性数据,可以让我们及时了解集群上应用的状态,以及集群本身的状态. Me ...

  4. Web渗透02_信息搜集

    以两个测试工具官方给出的用于工具实践的网站.一定不要拿在运营的网站做测试. http://testfire.net http://vulnweb.com DNS信息搜集 关注域名注册商,管理员的邮箱电 ...

  5. Antlr4 语法解析器(下)

    Antlr4 的两种AST遍历方式:Visitor方式 和 Listener方式. Antlr4规则文法: 注释:和Java的注释完全一致,也可参考C的注释,只是增加了JavaDoc类型的注释: 标志 ...

  6. Swagger注解中带有“/”导致SwaggerUI显示异常

    日常开发中一直使用swagger作为接口文档工具使用,这次在使用过程中发现一个问题. 正常情况下显示如下图 代码配置如下图 Controller Model 如果在Swagger注解中使用" ...

  7. 超级干货!Air780E的串口通信分享

    ​ 猛然发现,Air780E的串口通信还没分享,难怪已经有小伙伴提出了要求! 那我们来讲解低功耗4G模组Air780E的串口通信的基本用法,小伙伴们,学起来吧! 一.硬件准备  ​ 780E开发板一套 ...

  8. delphi Image32 变形控制

    先看动画: 代码: 1 unit uFrmTransform; 2 3 interface 4 5 uses 6 Winapi.Windows, Winapi.Messages, System.Sys ...

  9. delphi Image32 路径

    用 Image32的理由之一,也是路径这块做得比delphi(FMX)自带的要好,skia中支持svg,但对路径处理功能不够强大.VCL只能使用第三方库. VCL如果要支持SVG,只有 Image32 ...

  10. 【一步步开发AI运动小程序】三、运动识别处理流程

    随着人工智能技术的不断发展,阿里体育等IT大厂,推出的"乐动力"."天天跳绳"AI运动APP,让云上运动会.线上运动会.健身打卡.AI体育指导等概念空前火热.那 ...