文章目录说明核心实现代码目录代码实现添加共享库Alias TargetLinking a Shared Library编译运行
说明
展示了一个 hello world 示例,它首先创建并链接了一个共享库。
核心实现
代码目录
|-📁prj04 |-- 🎴CMakeLists.txt |-📁include |-📁shared |-- 📄Hello.h |-📁src |-- 📄Hello.cpp |-- 📄main.cpp
代码实现
/prj04/CMakeLists.txt
cmake_minimum_required(VERSION 3.5)project(hello_library)############################################################
# 创建一个库
#############################################################从库源生成共享库
add_library(hello_library SHARED src/Hello.cpp
)
add_library(hello::library ALIAS hello_library)target_include_directories(hello_libraryPUBLIC ${PROJECT_SOURCE_DIR}/include
)############################################################
# 创建可执行程序
#############################################################添加具有上述源的可执行文件
add_executable(hello_binarysrc/main.cpp
)#将新的 hello_library 目标与 hello_binary 目标链接起来
target_link_libraries( hello_binaryPRIVATE hello::library
)
/prj04/include/shared/Hello.h
#ifndef __HELLO_H__
#define __HELLO_H__#ifdef _MSC_VER#define DLL_EXPORT_DECL __declspec(dllexport)
#else#define DLL_EXPORT_DECL
#endif//msvc编辑器 _declspec(dllexport),这个你不加windows编译不过
//只有在widnows平台添加这个宏 才会生成 hello_library.lib,否则咱们函数没导出去
//minggw编辑器 加不加_declspec(dllexport)都可以class DLL_EXPORT_DECL Hello
{
public:void print();
};#endif
/prj04/src/Hello.cpp
#include #include "shared/Hello.h"void Hello::print()
{std::cout |