基于CMakeList.txt文件创建C++动态库及静态库

7 篇文章 1 订阅
1 篇文章 0 订阅

基于CMakeList.txt文件创建C++动态库及静态库

1. CMakeList.txt文件

cmake_minimum_required(VERSION 3.12)
project(calculate)

set(CMAKE_CXX_STANDARD 14)

add_library(myfunctions SHARED MyMathFuncs.cpp)

add_executable(calculate main.cpp)
target_link_libraries(calculate myfunctions)

以上是编译动态库的CMakeList.txt文件,编译后会生成dll或者so文件。如需编译静态库,将add_library(myfunctions SHARED MyMathFuncs.cpp)改为add_library(myfunctions STATIC MyMathFuncs.cpp)即可,编译后会生成.lib或.a文件。

2. C++文件

2.1 MyMathFuncs.h

#ifndef MYMATHFUNCS_H
#define MYMATHFUNCS_H

class MyMathFuncs
{
public:
    MyMathFuncs();
    ~MyMathFuncs();
    // Returns a + b
    static double Add(double a, double b);
    // Returns a - b
    static double Subtract(double a, double b);
    // Returns a * b
    static double Multiply(double a, double b);
    // Returns a / b
    // Throws const std::invalid_argument& if b is 0
    static double Divide(double a, double b);
};

#endif //MYMATHFUNCS_H

2.2 MyMathFuncs.cpp

#include "MyMathFuncs.h"
#include <stdexcept>

MyMathFuncs::MyMathFuncs()
= default;

MyMathFuncs::~MyMathFuncs()
= default;

double MyMathFuncs::Add(double a, double b)
{
    return a + b;
}

double MyMathFuncs::Subtract(double a, double b)
{
    return a - b;
}

double MyMathFuncs::Multiply(double a, double b)
{
    return a * b;
}

double MyMathFuncs::Divide(double a, double b)
{
    if (b == 0)
    {
        throw std::invalid_argument("b cannot be zero!");
    }
    return a / b;
}

2.3 main.cpp

#include <iostream>
#include "MyMathFuncs.h"

int main() {

    double a = 7.4;
    int b = 99;

    std::cout << "a + b = " << MyMathFuncs::Add(a, b) << std::endl;
    std::cout << "a - b = " << MyMathFuncs::Subtract(a, b) << std::endl;
    std::cout << "a * b = " << MyMathFuncs::Multiply(a, b) << std::endl;
    std::cout << "a / b = " << MyMathFuncs::Divide(a, b) << std::endl;

    try
    {
        std::cout << "a / 0 = " << MyMathFuncs::Divide(a, 0) << std::endl;
    }
    catch (const std::invalid_argument &e)
    {
        std::cout << "Caught exception: " << e.what() << std::endl;
    }

    return 0;
}

将以上三个文件按以下命令进行编译可以生成相应文件:

mkdir build && cd build
cmake ..
make -j

3.运行

在命令行输入./calculate会得到如下结果:

a + b = 106.4
a - b = -91.6
a * b = 732.6
a / b = 0.0747475
a / 0 = Caught exception: b cannot be zero!
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用VSCode创建静态库时,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了C/C++插件和CMake工具。 2. 打开VSCode,创建一个新的文件夹作为你的项目文件夹。 3. 在项目文件夹中创建一个C++源文件,例如`main.cpp`。 4. 在`main.cpp`中编写你的代码。 5. 在项目文件夹中创建一个`CMakeLists.txt`文件,用于配置CMake构建。 6. 在`CMakeLists.txt`中添加以下内容: ``` cmake_minimum_required(VERSION 3.0) project(YourProjectName) # 添加你的源文件 add_executable(YourExecutableName main.cpp) # 添加静态库 add_library(YourLibraryName STATIC YourSourceFiles.cpp) # 链接静态库到可执行文件 target_link_libraries(YourExecutableName YourLibraryName) ``` 请注意将`YourProjectName`、`YourExecutableName`和`YourLibraryName`替换为你自己的项目和库的名称。 7. 保存`CMakeLists.txt`文件。 8. 打开VSCode的终端,并导航到你的项目文件夹。 9. 运行以下命令来生成构建文件: ``` cmake . ``` 10. 运行以下命令来构建你的项目: ``` make ``` 11. 构建成功后,你将在项目文件夹中找到生成的可执行文件和静态库文件。 这样,你就成功地使用VSCode创建了一个静态库。你可以在其他项目中使用这个静态库来链接和调用其中的函数和变量。 #### 引用[.reference_title] - *1* [VSCODE + MinGW(cmake) 配置C++编译调试环境,创建demo,静态库,动态库(以及附带常用makelist设置) 傻瓜一站...](https://blog.csdn.net/qq_37059136/article/details/125669642)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [1.4 静态库的制作](https://blog.csdn.net/weixin_43306271/article/details/123905098)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [使用CMake构建静态库动态库](https://blog.csdn.net/hubing_hust/article/details/128515724)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值