一个demo,生成静态链接库的源文件树结构
1.生成静态链接库
CMakeLists.txt文件
# 设置最低版本要求
cmake_minimum_required(VERSION 2.8.13)
# 定义项目名称
project(MyProject)
# 指定 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# 设置输出路径
set(OUTPATH ../bin)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPATH})
# 搜索当前目录下 `lib` 子目录中的所有 `.cpp` 文件
#aux_source_directory(.. SOURCE_FILE)
file(GLOB SOURCE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/lib/*.cpp")
# 添加静态库
add_library(mymath STATIC ${SOURCE_FILE})
# 包含头文件目录
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include")
静态链接库要在lib目录下,可以在file(GLOB SOURCE_FILE “${CMAKE_CURRENT_SOURCE_DIR}/lib/*.cpp”)中找到源文件,换成别的目录找不到(_add_library): No SOURCES given to target出现这个错误
可以试试修改为找文件的其他命令
#搜索上一级目录的源文件
aux_source_directory(.. SOURCE_FILE)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR SOURCE_FILE)
2。动态库生成
# 设置输出路径
set(OUTPATH ../bin)
#用作动态库路径
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPATH})
#只能用作静态库生成路径
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPATH})
# 添加共享库
add_library(mymath SHARED ${SOURCE_FILE})
3.生成动态库并链接
cmake_minimum_required(VERSION 3.20.0)
project(MyProject)
# 指定 C++ 标准
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# 设置输出路径
set(OUTPATH ../lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPATH})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPATH})
# 搜索当前目录下 `src` 子目录中的所有 `.cpp` 文件
file(GLOB SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
# 添加共享库
add_library(mymath SHARED ${SOURCE_FILES})
# 包含头文件目录
target_include_directories(mymath PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
# 假设 main.cpp 是主入口点
add_executable(program main.cpp)
# 链接到 mymath 共享库
target_link_libraries(program PUBLIC mymath)
# 注意:不再需要 link_directories 和重复的 target_link_libraries 调用