cmakelist如何写成编译成一个动态库

在CMake中,编写一个CMakeLists.txt文件以编译生成一个动态库(在Windows上通常是.dll文件,在Linux和macOS上通常是.so或.dylib文件)是一个相对直接的过程。以下是一个基本的步骤和示例,展示如何配置CMake以生成一个动态库。

 

1. 指定CMake版本

 

首先,在你的CMakeLists.txt文件的开始处,可以指定一个所需的CMake最低版本。这不是必需的,但对于复杂的项目或依赖某些新功能的项目很有用。

 

cmake

cmake_minimum_required(VERSION 3.10)

 

2. 设置项目名称和版本

 

接着,使用project()命令设置项目的名称和(可选的)版本号。

 

cmake

project(MyDynamicLibrary VERSION 1.0)

 

3. 设置C++标准

 

如果你的库是用C++编写的,你可能需要指定C++标准。

 

cmake

set(CMAKE_CXX_STANDARD 11)

set(CMAKE_CXX_STANDARD_REQUIRED True)

 

4. 添加源文件

 

使用add_library()命令来添加你的源文件,并指定生成的是共享库(即动态库)。

 

cmake

add_library(MyDynamicLibrary SHARED

    src/MyClass.cpp

    src/MyOtherClass.cpp

)

 

在这里,MyDynamicLibrary是你生成的库的名字,SHARED表示你希望生成一个共享库(动态库)。随后是你源文件的列表。

 

5. (可选)添加头文件目录

 

如果你的库使用了位于特定目录的头文件,你可能需要将这些目录添加到包含目录中,以便在编译时找到它们。

 

cmake

target_include_directories(MyDynamicLibrary

    PUBLIC

        include

)

 

 

在这个例子中,我们假设头文件位于项目根目录下的include文件夹中。

 

6. (可选)链接其他库

 

如果你的库需要链接到其他库,可以使用target_link_libraries()命令。

 

cmake

target_link_libraries(MyDynamicLibrary

    PRIVATE

        SomeOtherLibrary

)

 

7. 配置和生成

 

配置你的项目并生成构建文件。这通常通过在项目的根目录中运行CMake来完成,你可以指定一个构建目录来避免污染你的源代码目录。

 

bash

mkdir build

cd build

cmake ..

 

 

然后,你可以使用生成的构建系统(如Makefiles, Ninja等)来编译你的项目。

 

完整示例

cmake

cmake_minimum_required(VERSION 3.10)

project(MyDynamicLibrary VERSION 1.0)

 

set(CMAKE_CXX_STANDARD 11)

set(CMAKE_CXX_STANDARD_REQUIRED True)

 

add_library(MyDynamicLibrary SHARED

    src/MyClass.cpp

    src/MyOtherClass.cpp

)

 

target_include_directories(MyDynamicLibrary

    PUBLIC

        include

)

 

# 如果需要链接其他库

# target_link_libraries(MyDynamicLibrary

# PRIVATE

# SomeOtherLibrary

# )

 

 

确保你的源文件、头文件和CMakeLists.txt文件位于正确的目录中,以便CMake可以正确地找到并编译它们。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值