在CMakeLists.txt文件中加入.so文件

一、为什么要.so文件?

CMakeLists.txt 中加入 .so 文件是为了将这些 共享库 动态链接到项目中。

这样可以在编译时告诉 CMake 你的程序依赖于这些外部的共享库,并在运行时加载它们。

二、.so文件是什么?

.so 文件是一种 共享库文件,在 Linux 和其他类 Unix 系统中常见。.soshared object 的缩写,用于将库文件动态链接到应用程序。共享库的主要目的是节省内存和减少磁盘空间,因为多个程序可以共享同一个库文件。

三、怎么在CMmakeLists.txt文件中加入.so文件?

文件目录如下

在lib目录中有.so文件,在CmkeLists.txt文件中加入如下代码:

# 查找所有 .so 文件
file(GLOB LIBRARY_FILES ./lib/*.so)
target_link_libraries(object_name  ${LIBRARY_FILES})

补充CMakeLists.txt 的基本语法:

1. 最低版本要求

cmake_minimum_required(VERSION <版本号>)

2. 项目名称

project(<项目名> [LANGUAGES CXX C])

3. 设置编译选项

set(CMAKE_CXX_STANDARD 11)  # 设置 C++ 标准
set(CMAKE_BUILD_TYPE Debug) # 设置构建类型

4. 添加源文件

add_executable(<目标名> <文件1> <文件2>)

5. 包含目录

include_directories(<路径>)
target_include_directories(<目标名> PRIVATE <路径>)

6. 链接库

target_link_libraries(<目标名> <库1> <库2>)

7. 设置输出路径

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY <路径>)

8. 查找库或包

find_package(<包名> REQUIRED)

示例

cmake_minimum_required(VERSION 3.10)
project(MyProject LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)

add_executable(my_app main.cpp)
target_include_directories(my_app PRIVATE include)
target_link_libraries(my_app pthread)
### 如何在 CLion 中编译生成 `.so` 文件 为了在 CLion 中创建并编译生成共享库(`.so` 文件),可以按照如下方法配置项目: #### 使用 CMake 创建共享库 CMake 提供了简单的方式用于定义和构建共享库。通过修改 `CMakeLists.txt` 文件来指定要创建的是动态链接库而不是静态库。 ```cmake # 设置最低版本要求 cmake_minimum_required(VERSION 3.10) # 定义工程名称 project(MySharedLibrary VERSION 1.0 LANGUAGES CXX) # 添加文件目录 set(SOURCES src/main.cpp) # 声明一个名为 my_shared_lib 的共享库 add_library(my_shared_lib SHARED ${SOURCES}) # 如果需要设置安装路径或其他属性,可继续添加相应指令 target_include_directories(my_shared_lib PUBLIC include) install(TARGETS my_shared_lib DESTINATION lib) ``` 上述脚本会告诉 CMake 构建一个名为 `my_shared_lib` 的共享库,并将其导出头文件放置于项目的 `include` 子目录下[^1]。 #### 编写简单的测试程序验证共享库功能 编写一段简单的代码作为客户端应用去加载这个新创建的共享库,以此检验其工作状态是否正常。 假设有一个函数 `hello()` 实现如下: ```cpp // hello.cpp #include <iostream> void hello() { std::cout << "Hello from shared library!" << std::endl; } ``` 对应的头文件可能是这样的: ```cpp // hello.h #ifndef HELLO_H_ #define HELLO_H_ void hello(); #endif //HELLO_H_ ``` 然后可以在另一个独立的应用程序里调用它来进行测试: ```cpp // main.cpp #include "hello.h" int main(){ hello(); return 0; } ``` 最后,在同一个 `CMakeLists.txt` 或者新的子模块中的 `CMakeLists.txt` 加入下面几行以确保能够找到刚才建立好的共享库: ```cmake find_package(PkgConfig REQUIRED) pkg_check_modules(MYLIB REQUIRED IMPORTED_TARGET my_shared_lib) add_executable(test_app main.cpp) target_link_libraries(test_app PRIVATE PkgConfig::MYLIB) ``` 这将使得应用程序能够在运行时定位到所需的共享对象文件[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值