cmakelist怎么封装so库
时间: 2023-08-13 09:21:30 浏览: 100
要封装一个so库,你需要编写一个CMakeLists.txt文件,其中包括以下内容:
1. 定义项目名称和支持的最低CMake版本:
```
cmake_minimum_required(VERSION 3.0)
project(mylib)
```
2. 定义编译选项,如编译器和编译标志:
```
set(CMAKE_CXX_COMPILER "g++") # 指定编译器为g++
set(CMAKE_CXX_FLAGS "-std=c++11 -fPIC") # 指定编译标志
```
3. 定义源文件列表:
```
set(SRC_LIST src/mylib.cpp)
```
4. 定义头文件路径和库文件路径:
```
include_directories(include)
link_directories(lib)
```
5. 编译生成动态库:
```
add_library(mylib SHARED ${SRC_LIST})
```
6. 指定安装位置:
```
install(TARGETS mylib LIBRARY DESTINATION lib)
install(FILES include/mylib.h DESTINATION include)
```
这样,就可以使用CMake生成so库了。
相关问题
我现有的目录下有src、include、client、server四个文件夹,依赖/usr/local/lib/libhiredis.so,我希望用src、include生成一个动态库,用server加这个动态库生成一个程序并封装成service,应该怎么写cmakelist.txt,
你可以按照以下方式编写CMakeLists.txt文件:
```
cmake_minimum_required(VERSION 3.5)
project(MyProject)
set(CMAKE_CXX_STANDARD 11)
# 设置头文件路径
include_directories(include)
# 设置源文件路径
file(GLOB SOURCES "src/*.cpp")
# 生成动态库
add_library(MyLibrary SHARED ${SOURCES})
# 链接libhiredis.so库
target_link_libraries(MyLibrary hiredis)
# 生成可执行文件
add_executable(MyServer server/main.cpp)
# 链接MyLibrary库
target_link_libraries(MyServer MyLibrary)
# 将可执行文件封装成service
install(TARGETS MyServer DESTINATION /etc/systemd/system)
```
这个CMakeLists.txt文件假设你的源代码文件都在src文件夹中,头文件在include文件夹中,server的主程序在server/main.cpp中。你需要将libhiredis.so库放在/usr/local/lib/目录下。
你可以使用以下命令来编译和安装程序:
```
mkdir build && cd build
cmake ..
make
sudo make install
```
这将会生成MyLibrary动态库和MyServer可执行文件,并将MyServer封装成service并安装到/etc/systemd/system目录下。
我现有的目录下有src、include、client、server四个文件夹,依赖/usr/local/lib/libhiredis.so.我希望用src、include生成一个动态库,用server加这个动态库生成一个程序并封装成service。service的配置文件应该放置在哪儿,应该怎么写cmakelist.txt
你可以将service的配置文件放置在/etc/systemd/system目录下,命名为你的服务名.service。在cmakelist.txt中,你需要添加以下内容:
```
cmake_minimum_required(VERSION 3.5)
project(your_project_name)
set(CMAKE_CXX_STANDARD 11)
# 添加头文件路径
include_directories(include)
# 添加源文件路径
aux_source_directory(src DIR_SRCS)
# 生成动态库
add_library(your_lib SHARED ${DIR_SRCS})
# 链接libhiredis.so库
target_link_libraries(your_lib /usr/local/lib/libhiredis.so)
# 生成可执行文件
add_executable(your_service server/main.cpp)
# 链接动态库
target_link_libraries(your_service your_lib)
# 安装动态库和可执行文件
install(TARGETS your_lib DESTINATION /usr/local/lib)
install(TARGETS your_service DESTINATION /usr/local/bin)
# 安装服务配置文件
install(FILES your_service.service DESTINATION /etc/systemd/system)
```
注意替换your_project_name、your_lib、your_service、DIR_SRCS、libhiredis.so、your_service.service为你自己的项目名、库名、服务名、源文件路径、libhiredis.so的路径、服务配置文件名。
阅读全文