一、Cmake工具安装
- 工具下载地址:https://cmake.org/download/
选择对应的版本和架构进行下载
- 通过安装Clion来安装cmake工具
clion下载地址:https://www.jetbrains.com/clion/
安装完成后可以在安装目录下找到对应的工具目录,然后自行设置环境变量
- 使用cmake
# 创建存储缓存文件的文件夹,build mkdir build && cd build # 使用CMake命令生成makefile文件 cmake .. # 使用make命令进行编译, 有make可以使用make cmake --build .
二、生成动态库与静态库并使用
-
动态库: 后缀为 so、dll
在编译过程中不会将其打包到可执行文件中,是在程序运行的时候才进行载入的,可以节省内存空间,也方便跟新库文件 -
静态库:后缀为 lib、.a
在编译过程中会将静态库打包到可执行文件中,每次更新静态库,可以执行文件都需要重新进行编译 -
静态库生成与使用(使用clion)
1、新建项目并选择为C++库,库类型选择static
2、创建完会生成初始文件如下:
3、cmakelists.txtcmake_minimum_required(VERSION 3.29) project(mylib) set(CMAKE_CXX_STANDARD 11) # 生成为静态库 add_library(mylib STATIC library.cpp) # 设置安装目录 SET(CMAKE_INSTALL_PREFIX ${PROJECT_BINARY_DIR}/${PROJECT_NAME}_lib) # 拷贝头文件 到 include 目录下 INSTALL(FILES library.h DESTINATION include) INSTALL(TARGETS mylib LIBRARY DESTINATION lib)
4、点击构建与安装,生成对应的lib文件
5、将生成的lib目录拷贝到自己的项目下,并配置cmakelists.txt,就完成了静态库文件使用
可以在再导入头文件后,使用其中定义的方法
# 配置头文件目录 include_directories(${PROJECT_SOURCE_DIR}/mylib_lib/include) # 配置静态库目录 link_directories(${PROJECT_SOURCE_DIR}/mylib_lib/lib) # 引用对应的库文件 link_libraries(libmylib.a)
-
动态库生成与使用(使用clion)
1、在上面静态库生成的cmakelists.txt文件中进行修改,使其生成动态库文件cmake_minimum_required(VERSION 3.29) project(mylib) set(CMAKE_CXX_STANDARD 11) #生成动态库 **add_library(mylib SHARED library.cpp)** #生成静态库 #add_library(mylib STATIC library.cpp) #设置安装目录 SET(CMAKE_INSTALL_PREFIX ${PROJECT_BINARY_DIR}/${PROJECT_NAME}_lib) #拷贝头文件 到 include 目录下 INSTALL(FILES library.h DESTINATION include) #INSTALL(TARGETS mylib ARCHIVE DESTINATION lib) #将dll文件安装到lib下 INSTALL(TARGETS mylib LIBRARY DESTINATION lib)
2、构建安装,生成对应的库目录
3、将目录拷贝到项目中
配置cmakelists.txt
# 配置头文件目录
include_directories(${PROJECT_SOURCE_DIR}/mylib_lib/include)
# 配置静态库目录
link_directories(${PROJECT_SOURCE_DIR}/mylib_lib/bin)
# 引用对应的库文件
link_libraries(libmylib.dll)
配置环境运行的环境变量或者将动态库文件拷贝到可执行文件同级目录
将动态库文件的路径配置到用户环境变量中
配置cmakelists.txt拷贝到可执行文件的同级目录
这句话的意思就是在编译完成后,执行cmake命令将库文件拷贝到cmake-build-debug
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/mylib_lib/bin $<TARGET_FILE_DIR:cTest1>)
最后还有一种连接法:
用创建软连接的方法实现,暂时还没有成功
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_SOURCE_DIR}/mylib_lib/bin $<TARGET_FILE_DIR:cTest1>/bin)