跳转到内容
新建笔记

CMake 包发现

image-20240610122240475

先后顺序

# 1. 设置 CMake 最低版本和项目名称
cmake_minimum_required(VERSION 3.10)
# 补充,包含其他CMake模块文件,这些文件可能提供了额外的函数或宏,用于设置变量或查找库文件并创建目标。
include(cmake/modules/set_ifndef.cmake)
project(MyProject)
# 2. 设置变量
set(CMAKE_CXX_STANDARD 14)
set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
# [可选] 3. 设置全局包含目录(推荐使用目标特定的替代方法)
# include_directories(${PROJECT_SOURCE_DIR}/include)
# [可选] 4. 设置全局库目录(推荐使用目标特定的替代方法)
# link_directories(${PROJECT_SOURCE_DIR}/lib)
# [可选] 找包
# 5. 定义目标
add_executable(my_executable main.cpp)
# 6. 为目标指定包含目录
target_include_directories(my_executable PRIVATE ${PROJECT_SOURCE_DIR}/include)
# 7. 为目标链接库
target_link_libraries(my_executable PRIVATE some_library)
# 8. 为目标添加源文件
target_sources(my_executable PRIVATE source.cpp)
# 9. 添加编译选项
target_compile_options(my_executable PRIVATE -Wall)
# 10. 定义安装规则
install(TARGETS my_executable RUNTIME DESTINATION bin)
find_library(<VAR> NAMES name1 [name2 ...] [PATHS path1 [path2 ...]]
[NO_DEFAULT_PATH] [NO_CMAKE_ENVIRONMENT_PATH]
[NO_CMAKE_PATH] [NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH] [CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH | NO_CMAKE_FIND_ROOT_PATH])
find_library(MY_LIB NAMES mylib) # 将在默认的搜索路径中查找名为 mylib 的库,并将其路径存储在变量 MY_LIB 中
find_library(MY_LIB NAMES mylib PATHS /path/to/custom/lib /another/path) # 将在指定的路径和默认路径中查找 mylib
find_library(MY_LIB NAMES mylib NO_DEFAULT_PATH) # 将只搜索 mylib,但不使用默认路径和环境变量
find_library(MY_LIB NAMES mylib CACHE) # 将查找 mylib 并将其路径存储在 CMake 缓存中,如果已缓存则不再搜索
find_library(MY_LIB NAMES mylib mylib2 PATHS /path/to/libs) # 如果 mylib 未找到,find_library 将尝试查找 mylib2
  • <VAR>:存储找到的库文件路径的变量名。
  • NAMES:指定要搜索的库文件名称列表。如果找到多个,将返回第一个找到的库。
  • PATHS:指定要搜索的路径列表。这些路径将与系统路径一起被搜索。
  • NO_DEFAULT_PATH:不使用默认路径和环境变量进行搜索。
  • NO_CMAKE_*_PATH:这些选项分别用于禁用来自 CMake 环境、系统环境变量、CMake 路径和系统路径的搜索。
  • CMAKE_FIND_ROOT_PATH_BOTH、ONLY_CMAKE_FIND_ROOT_PATH、NO_CMAKE_FIND_ROOT_PATH:这些选项控制对于 CMAKE_FIND_ROOT_PATH 的处理方式。