cmake中编译生成动态库文件.so,静态库文件.a到指定文件夹及安装

本文详细介绍了如何使用CMake构建动态库和静态库。通过一个具体的实例,展示了从创建文件夹、编写源代码到配置CMakeLists.txt,再到编译和安装文件的完整过程。最终在指定位置生成了相应的库文件。
摘要由CSDN通过智能技术生成

CMAKE关于生成库文件的简单用法

1.本文主要针对某个具体实例给出,首先建立一个文件夹test,现在有以下几个文件:

test/useHello.cpp

#include "libHelloSLAM.h"
int main(int argc,char** argv)
{
  printHello();
  return 0;  
}

test/include/libHelloSLAM.h

#ifndef LIBHELLOSLAM_H_
#define LIBHELLOSLAM_H_
void printHello();
#endif

tset/src/libHelloSLAM.cpp

#include <iostream>
using namespace std;

void printHello()
{
  cout<<"Hello SLAM!"<<endl;
}

2. 然后我们对于这几个文件建立test/CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

#创建工程文件
project(helloSLAM)

#头文件,意思是当前可执行程序所使用的头文件在include中
include_directories(${PROJECT_SOURCE_DIR}/include)

#添加可执行程序
add_executable(helloSLAM useHello.cpp)

#生成动态库.so文件,默认在build文件夹中
add_library(hello_shared SHARED ${PROJECT_SOURCE_DIR}/src/libHelloSLAM.cpp)

#生成静态库.a文件
#add_library(hello ${PROJECT_SOURCE_DIR}/src/libHelloSLAM.cpp)

#连接,将动态库链接到可执行文件
target_link_libraries(helloSLAM hello_shared)

#设置编译模式
set(CMAKE_BUILD_TYPE "Release" )

#生成文件到指定位置
#set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

#install 安装文件到指定位置
install(TARGETS hello_shared LIBRARY DESTINATION /usr/local/lib)
install(FILES ${PROJECT_SOURCE_DIR}/include/libHelloSLAM.h DESTINATION /usr/local/include)

3. 创建test/build

1.第一步

cd build
cmake ..

2.第二步

make

运行正常,指定位置会生成相应文件

CMake,你可以使用`add_library`命令创建一个目标,并将已有的静态库文件添加到该目标。具体步骤如下: 1. 使用`add_library`命令创建一个空的目标,例如: ```cmake add_library(my_target STATIC) ``` 这将创建一个名为`my_target`的静态库目标。 2. 使用`target_link_libraries`命令将已有的静态库文件链接到目标,例如: ```cmake target_link_libraries(my_target /path/to/my_library.a) ``` 其,`/path/to/my_library.a`是你要链接的静态库文件的路径。 3. 将目标的源文件添加到目标,例如: ```cmake target_sources(my_target PRIVATE source1.cpp source2.cpp ...) ``` 其,`source1.cpp`、`source2.cpp`等是目标的源文件。 4. (可选)设置目标的包含目录和编译选项,例如: ```cmake target_include_directories(my_target PUBLIC /path/to/include) target_compile_options(my_target PRIVATE -Wall -Werror) ``` 这将使得目标能够正确地编译和链接,并且能够使用库文件的函数和变量。 完整的示例代码如下: ```cmake add_library(my_target STATIC) target_sources(my_target PRIVATE source1.cpp source2.cpp ...) target_link_libraries(my_target /path/to/my_library.a) target_include_directories(my_target PUBLIC /path/to/include) target_compile_options(my_target PRIVATE -Wall -Werror) ``` 其,`my_target`是目标的名称,`source1.cpp`、`source2.cpp`等是目标的源文件,`/path/to/my_library.a`是要链接的静态库文件的路径,`/path/to/include`是要包含的头文件的路径,`-Wall -Werror`是要使用的编译选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值