6.通过CMake制作库文件

有时候编译项目并不是为了得到可执行程序,而是要把当前项目的原文件编译成库文件,动态库或静态库提供给第三方使用
动态库有可执行权限,静态库没有
windows动态库.dll 静态库.so
Linux动态库.lib 静态库.a

1.制作静态库
add_library(库名称 STATIC 源文件1 [源文件2] ...)
在Linux中,静态库名字分为三部分:lib+库名字+.a,此处只需要指定出库的名字就可以了,另外两部分在生成该文件的时候会自动填充。
在Windows中虽然库名和Linux格式不同,但也只需指定出名字即可。

cmake_minimum_required(VERSION 3.10.2)
project(test)

aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC) #PROJECT_SOURCE_DIR就是CMakefileLists.txt所在路径

file(GLOB_RECURSE SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) #CMAKE_CURRENT_SOURCE_DIR就是CMakefileLists.txt所对应的路径
include_directories(${PROJECT_SOURCE_DIR}/include)
set(CMAKE_CXX_STANDARD 11)

add_executable(app ${SRC})

add_library(calc STATIC ${SRC})

2.制作动态库
add_library(库名称 SHARED 源文件1 [源文件2] ...)
在Linux中,动态库名字分为三部分:lib+库名字+.so,此处只需要指定出库的名字就可以了,另外两部分在生成该文件的时候会自动填充。
在Windows中虽然库名和Linux格式不同,但也只需指定出名字即可。

cmake_minimum_required(VERSION 3.10.2)
project(test)

aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC) #PROJECT_SOURCE_DIR就是CMakefileLists.txt所在路径

file(GLOB_RECURSE SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) #CMAKE_CURRENT_SOURCE_DIR就是CMakefileLists.txt所对应的路径
include_directories(${PROJECT_SOURCE_DIR}/include)
set(CMAKE_CXX_STANDARD 11)

add_executable(app ${SRC})

add_library(calc SHARED ${SRC})

3.使用库
首先把库发布给使用者,发布两部分数据(库文件和头文件),

4.指定输出的路径 LIBRARY_OUTPUT_PATH,这个宏对应静态库文件和动态库文件都适用
用set设置

cmake_minimum_required(VERSION 3.10.2)
project(test)

aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC) #PROJECT_SOURCE_DIR就是CMakefileLists.txt所在路径

file(GLOB_RECURSE SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) #CMAKE_CURRENT_SOURCE_DIR就是CMakefileLists.txt所对应的路径
include_directories(${PROJECT_SOURCE_DIR}/include)
set(CMAKE_CXX_STANDARD 11)

add_executable(app ${SRC})

set(LIBRARY_OUTPUT_PATH /home/book/MyCode/Cmake2/build/abcdefg) #库就会在/home/book/MyCode/Cmake2/build/abcdefg生成
add_library(calc SHARED ${SRC})

posted @ 2026-01-06 14:46  r5ett  阅读(4)  评论(0)    收藏  举报