Cmake基础(5)

这篇文章主要描述如何使用cmake构建一个库工程

文章目录

库工程的代码:头文件和源文件

#ifndef ADD_H
#define ADD_H

#ifdef _WIN32
#ifdef MYMATH_EXPORTS
#define MYMATH_API __declspec(dllexport)
#else
#define MYMATH_API __declspec(dllimport)
#endif
#else
#define MYMATH_API
#endif

MYMATH_API int add(int a, int b);

#endif  // ADD_H

#include "add.h"

MYMATH_API int add(int a, int b) {
    return a + b;
}

add_library

编译库工程把之前的add_excuatable换为add_library
add_library 是 CMake 中用于定义库的命令。它的基本语法是:

add_library(target_name [STATIC | SHARED | MODULE] source1 [source2 ...])
  • target_name 是你想要给库定义的名称。
  • [STATIC | SHARED | MODULE] 是库的类型,有三种选择:
    • STATIC 表示静态库,即.lib文件(在Windows下)或者.a文件(在Linux下)。
    • SHARED 表示动态共享库,即.dll文件(在Windows下)或者.so文件(在Linux下)。
    • MODULE 表示模块,一般在使用 INSTALL(TARGETS ...) 时使用。

对于你的问题,add_library(${LIBRARY_NAME} SHARED ${cpp_list} ${h_list}) 意味着你正在创建一个动态共享库(DLL,在Windows下)并将指定的源文件 ${cpp_list} 和头文件 ${h_list} 编译为这个库。

一些说明:

  • 通常,如果你希望库在运行时动态加载(即在运行时可以通过 LoadLibrary 或类似的机制加载),你会选择 SHARED
  • 如果你希望生成一个静态库,即链接到可执行文件时被静态链接,你可以选择 STATIC
  • 如果你的库是一个插件,可能使用 MODULE

在这种情况下,SHARED 表示你正在创建一个动态库。

install

看这个:https://zhuanlan.zhihu.com/p/102955723
在cmake中添加这个

install(TARGETS ${LIBRARY_NAME}
    LIBRARY DESTINATION lib/$<CONFIG>
    ARCHIVE DESTINATION lib/$<CONFIG>
    RUNTIME DESTINATION bin/$<CONFIG>
    PUBLIC_HEADER DESTINATION include
)
# 头文件有时候不能自动拷贝,所以加上下面这个
# Install headers
file(GLOB LIBRARY_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
install(FILES ${LIBRARY_HEADERS} DESTINATION include)

先编译,然后运行install,直接安装到默认位置了C:/Program Files (x86)

PS E:\workspace\cmake_demo\simple_demo\module\module_build> cmake --install . --config Debug  
-- Installing: C:/Program Files (x86)/MyMathLibrary/lib/Debug/MYLIB_x64d_msvc.lib
-- Installing: C:/Program Files (x86)/MyMathLibrary/bin/Debug/MYLIB_x64d_msvc.dll
-- Up-to-date: C:/Program Files (x86)/MyMathLibrary/include/add.h


PS E:\workspace\cmake_demo\simple_demo\module\module_build> cmake --install . --config Release
-- Up-to-date: C:/Program Files (x86)/MyMathLibrary/lib/Release/MYLIB_x64_msvc.lib
-- Up-to-date: C:/Program Files (x86)/MyMathLibrary/bin/Release/MYLIB_x64_msvc.dll
-- Up-to-date: C:/Program Files (x86)/MyMathLibrary/include/add.h

修改安装路径

方法1:修改cmake文件。在cmake文件中加入set(CMAKE_INSTALL_PREFIX "../install")。
方法2:修改cmake命令参数。cmake -DCMAKE_INSTALL_PREFIX="../install"

使用方法2

PS E:\workspace\cmake_demo\simple_demo\module\module_build> cmake  -DCMAKE_INSTALL_PREFIX="../install" ..
-- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.22631.
-- ^^^^^^Compiler: MSVC
-- Configuring done (0.0s)
-- Generating done (0.0s)
-- Build files have been written to: E:/workspace/cmake_demo/simple_demo/module/module_build


PS E:\workspace\cmake_demo\simple_demo\module\module_build> cmake --install . --config Release                                      
-- Installing: E:/workspace/cmake_demo/simple_demo/module/install/lib/Release/MYLIB_x64_msvc.lib
-- Installing: E:/workspace/cmake_demo/simple_demo/module/install/bin/Release/MYLIB_x64_msvc.dll
-- Installing: E:/workspace/cmake_demo/simple_demo/module/install/include/add.h

其实不止库工程可以install,可执行文件也可以install

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值