目录
[1 常用命令](#1 常用命令)
[(3) install](#(3) install)
[(5) add_subdirectory](#(5) add_subdirectory)
[(6) find_library](#(6) find_library)
[2 cmake 生成库文件](#2 cmake 生成库文件)
[(2) 代码](#(2) 代码)
[3 cmake调用库文件](#3 cmake调用库文件)
1 常用命令
(1)configure_file
在 CMake 中,configure_file
命令用于复制一个源文件到一个目标位置,并在复制的过程中替换源文件中的某些变量。这对于生成配置头文件特别有用,其中某些值(如路径、版本号等)需要在构建时确定。
(2).cmake文件
cpp
file(GLOB FREECAD_HELPER_CMAKE_FILES ./*.cmake)
set(_SKIP_FILES "SetupQt.cmake")
foreach(_CMAKE_FILE ${FREECAD_HELPER_CMAKE_FILES})
get_filename_component(_FILENAME ${_CMAKE_FILE} NAME)
if (NOT _FILENAME IN_LIST _SKIP_FILES)
include(${_CMAKE_FILE})
endif()
endforeach(_CMAKE_FILE ${FREECAD_HELPER_CMAKE_FILES})
(3) install
在 CMake 中,install()
命令用于指定构建目标在安装时应该被复制到哪里。这通常用于安装库、头文件、可执行文件等,以便其他项目或用户可以使用它们。
cpp
# CMakeLists.txt
add_executable(my_program main.cpp)
# 安装可执行文件到 /usr/local/bin 目录
install(TARGETS my_program DESTINATION bin)
# CMakeLists.txt
add_library(my_library my_library.cpp)
# 安装库文件到 /usr/local/lib 目录
install(TARGETS my_library DESTINATION lib)
# CMakeLists.txt
include_directories(include)
# 安装头文件到 /usr/local/include/my_project 目录
install(FILES include/my_header.h DESTINATION include/my_project)
# CMakeLists.txt
# 安装多个文件到不同目录
install(FILES file1.txt file2.txt DESTINATION share/my_project)
# 安装整个目录及其内容
install(DIRECTORY doc/ DESTINATION share/my_project/docs)
(4)include_directories
在 CMake 中,include_directories()
命令用于向编译器添加包含目录,使得在编译源文件时可以找到所需的头文件。这通常用于指定项目中的头文件目录,或者是第三方库的头文件目录。
cpp
# 添加多个头文件目录
include_directories(
include
third_party/library1/include
third_party/library2/include
)
(5) add_subdirectory
add_subdirectory
是 CMake 中的一个命令,用于将子目录添加到构建过程中。这个命令的作用是在当前 CMakeLists.txt
文件的对应位置包含子目录中的 CMakeLists.txt
文件,并执行其中的命令。这使得项目的组织和管理变得更为容易和高效。
cpp
cmake_minimum_required(VERSION 3.10)
project(MyProject)
# 添加子目录 src 到构建中
add_subdirectory(src)
# 在父目录的 CMakeLists.txt 中,你还可以链接子目录中定义的目标
target_link_libraries(MyApp MyLib) # 假设 MyLib 是在 src 目录中定义的目标
(6) find_library
cpp
find_library(CMAKE_LIB cmake_library HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../lib)
# 打印PROJECT_SOURCE_DIR变量的值
message(STATUS "PROJECT_SOURCE_DIR is: ${PROJECT_SOURCE_DIR}")
# 如果CMAKE_LIB变量被成功设置(即库被找到),你也可以打印它的值
if(CMAKE_LIB)
message(STATUS "Found library: ${CMAKE_LIB}")
else()
message(FATAL_ERROR "Library not found!")
endif()
find_library(<VARNAME> name [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\])
* `