C++ 库的编译及使用

C++工程结构组织

C++静态库与动态库介绍

cmake 动/静库编译及使用例一

cmake 动/静库编译及使用例二

cmake 动/静库编译及使用例三(linux环境下的)

Windows+MinGW使用CMake生成.dll动态链接库

动态库生成项目

image
image

// CMakeLists.txt 文件内容
cmake_minimum_required(VERSION 3.23)
project(test_d)
set(CMAKE_CXX_STANDARD 14)
add_library(test_d SHARED library.cpp)

// library.h 文件内容
#ifndef TEST_D_LIBRARY_H
#define TEST_D_LIBRARY_H
void hello();
#endif //TEST_D_LIBRARY_H

// library.cpp 文件内容
#include "library.h"
#include <iostream>
void hello() {
    std::cout << "Hello, World!" << std::endl;
}

动态库使用项目

image

image


// 根路径下的 CMakeLists.txt 文件内容
cmake_minimum_required(VERSION 3.23)
project(test)
set(CMAKE_CXX_STANDARD 14)
# 设置可执行.exe文件输出路径
#set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(EXECUTABLE_OUTPUT_PATH build)
# 设置库文件输出路径
#set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
# 把该目录添加到库的搜索目录中去(这里设置了以后link_libraries()与target_link_libraries()都可以省去绝对路径)
link_directories(${PROJECT_SOURCE_DIR}/lib)
#link_directories(lib)
# 把该目录设为头文件目录(设置这个参数后,include()可以省去路径,源代码里的#include "xx.h" 也可以省去全路径)
include_directories(${PROJECT_SOURCE_DIR}/include)
# 添加子模块构建路径(必须含有CMakeLists.txt文件)
add_subdirectory(${PROJECT_SOURCE_DIR}/src)
# 按给定正则搜索文件
file(GLOB SRC_LIST "src/*.cpp")
# 添加多线程支持的其中一种方式
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -pthread")
# 生成可执行.exe
add_executable(${PROJECT_NAME} ${SRC_LIST})
# 生成库
#add_library(${PROJECT_NAME} SHARED ${SRC_LIST})
# 链接动态库
target_link_libraries(${PROJECT_NAME} libtest_d.dll libtest_d.dll.a)
# 将库安装到输出目录(本质上就是拷贝),常规操作就是建一个全局的安装目录并且添加到path中去,win操作系统就是这样做的(注意,这个命令需要手动触发安装,要不就必须要配置运行选项,编译完直接安装,最后执行运行才能看到效果)
#install(FILES lib/libtest_d.dll.a lib/libtest_d.dll DESTINATION ${PROJECT_BINARY_DIR})
install(FILES lib/libtest_d.dll.a lib/libtest_d.dll DESTINATION ${PROJECT_BINARY_DIR}/build)

// main.cpp 文件内容
#include "library.h"
int main(int argc, char *argv[]) {
    hello();
    return 0;
}


// src/CMakeLists.txt 文件内容
message("ok")

// library.h  文件内容
void hello();


// libtest_d.dll 与 libtest_d.dll.a 动态库文件为上面工程编译生成的直接复制过来

执行结果
image

posted @ 2023-01-30 22:19  黄河大道东  阅读(36)  评论(0编辑  收藏  举报