库添加
跳转到“库添加”在 CMake 中添加库(无论是静态库 .lib 或者动态库 .so/.dll/.dylib)通常涉及到几个步骤,具体取决于库的类型和您希望如何在项目中使用它们。以下是一些常见的方法来添加和链接库:
1)使用 find_package 来查找和配置外部库:
如果您的项目依赖于外部库,您可以使用 find_package 命令来查找并配置这些库。这通常需要库的 CMake 配置文件(Find<PackageName>.cmake)。
find_package(<PackageName> REQUIRED)如果找到库,find_package 会设置一些变量,您可以使用这些变量来包含库的头文件和链接库。
2)包含库的头文件:
使用 include_directories 命令来添加库的头文件路径,或者使用 target_include_directories 命令针对特定目标添加头文件路径。
include_directories(${<PackageName>_INCLUDE_DIRS})# 或者target_include_directories(my_target PRIVATE ${<PackageName>_INCLUDE_DIRS})3)链接库:
使用 link_directories 命令添加库文件的路径,或者使用 target_link_libraries 命令来链接库。
link_directories(${<PackageName>_LIBRARY_DIRS}) #如 link_directories(D:/program/TensorRT-8.5.1.7/lib)# 或者target_link_libraries(my_target PRIVATE ${<PackageName>_LIBRARIES}) # 您需要指定库的确切名称。4)添加库文件:
如果您已经有了库文件的路径,您可以直接使用 target_link_libraries 命令来链接它们。
target_link_libraries(my_target PRIVATE /path/to/library.lib)5)使用 add_library 来添加自己的库:
如果您的项目中包含了要构建为库的代码,您可以使用 add_library 命令来创建库。
add_library(my_library STATIC /path/to/source1.cpp /path/to/source2.cpp)6)使用 install 命令安装库:
如果您想将库安装到系统路径中,可以使用 install 命令。
install(TARGETS my_library DESTINATION lib)7)使用 export 命令导出库的依赖:
如果您正在创建一个库,并且希望其他项目能够轻松地链接到它,您可以使用 export 命令来导出库的依赖。
export(TARGETS my_library FILE MyLibraryConfig.cmake)请注意,link_directories 和 include_directories 命令在现代 CMake 项目中通常不推荐使用,因为它们会影响全局状态,可能会引起不可预见的问题。推荐使用 target_link_libraries 和 target_include_directories 命令,因为它们是针对特定目标的,并且可以更好地控制依赖关系。
8)搜索文件
1)aux_source_directory 命令
aux_source_directory 命令用于查找指定目录下的所有源文件,并将这些文件的列表存储到一个变量中。这通常用于当你有大量源文件且不想手动列出每个文件时。
# 命令格式aux_source_directory(<dir> <variable>)
# - `<dir>`:指定要搜索的目录。# - `<variable>`:将搜索到的源文件列表存储到该变量。cmake_minimum_required(VERSION 3.0)project(CALC)include_directories(${PROJECT_SOURCE_DIR}/include)
# 搜索 src 目录下的源文件aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_LIST)
add_executable(app ${SRC_LIST})2)file(GLOB …) 命令
file(GLOB ...) 命令用于根据指定的模式搜索文件,并生成一个文件列表。它可以用于搜索当前目录或递归搜索子目录。
# 命令格式file(GLOB <variable> <globbing-expression>)file(GLOB_RECURSE <variable> <globbing-expression>)<variable>:将搜索到的文件列表存储到该变量。<globbing-expression>:指定搜索模式,例如*.cpp表示搜索所有.cpp文件。
cmake_minimum_required(VERSION 3.0)project(CALC)
# 搜索当前目录的 src 目录下所有的 .cpp 源文件file(GLOB MAIN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)#file(GLOB_RECURSE ALL_SOURCES "*.c" "*.cpp")
# 搜索当前目录的 include 目录下所有的 .h 头文件file(GLOB MAIN_HEAD ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h)注意事项:
- 使用
GLOB时,搜索不会递归到子目录。 - 使用
GLOB_RECURSE时,会递归搜索所有子目录。 - 搜索模式可以包含通配符,如
*.cpp或*.h。 - 路径字符串可以使用双引号或不加引号。