Cree una biblioteca dinámica y una biblioteca estática de C ++ basadas en el archivo CMakeList.txt

Cree una biblioteca dinámica y una biblioteca estática de C ++ basadas en el archivo CMakeList.txt

1. Archivo 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)

El anterior es el archivo CMakeList.txt para compilar la biblioteca dinámica. Después de la compilación, se generará el archivo dll. Si necesita compilar una biblioteca estática, simplemente add_library(myfunctions SHARED MyMathFuncs.cpp)cámbiela add_library(myfunctions STATIC MyMathFuncs.cpp)y se generará un archivo .lib o .a después de la compilación.

2. Archivos 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;
}

Compile los tres archivos anteriores de acuerdo con el siguiente comando para generar los archivos correspondientes:

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

3. Ejecutar

Ingrese el ./calculatesiguiente resultado en la línea de comando :

a + b = 106.4
a - b = -91.6
a * b = 732.6
a / b = 0.0747475
a / 0 = Caught exception: b cannot be zero!

Supongo que te gusta

Origin blog.csdn.net/linghu8812/article/details/108519580
Recomendado
Clasificación