CMakeLists.txt用法备忘
CMakeLists.txt
是 CMake 构建系统的核心配置文件,它使用 CMake 语言来定义项目的构建过程。通过编写 CMakeLists.txt
,你可以跨平台地管理 C、C++、Fortran 等项目的编译、链接、测试和安装。
CMake通过CMakeLists.txt配置项目的构建系统,配合使用cmake命令行工具生成构建系统并执行编译、测试。
VScode 中使用CMakeLists.txt
插件必须安装
可选择编译器
cmake_minimum_required(VERSION 3.20)project(vsin01 VERSION 0.1 LANGUAGES CXX)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)set(OpenCV_DIR D:/opencv4.10/x64/mingw/lib)#库路径你自己换成你电脑上的find_package(OpenCV REQUIRED)include_directories(${OpenCV_INCLUDE_DIRS})# 包含 Eigen 头文件目录
include_directories("D:/Forvs/eigen-3.4.0")# 查找项目中的所有 .cpp 源文件,排除 CMake 生成目录
file(GLOB_RECURSE SOURCES${CMAKE_SOURCE_DIR}/*.cpp${CMAKE_SOURCE_DIR}/*.hpp
)# 手动排除掉 CMake 生成的 CMakeFiles 目录
list(FILTER SOURCES EXCLUDE REGEX "/CMakeFiles/")# 将找到的文件添加到可执行文件中
add_executable(MYCODE ${SOURCES})target_link_libraries(MYCODE PRIVATE ${OpenCV_LIBS})
Clion中使用(vscode也可以)
cmake_minimum_required(VERSION 3.31)
# 定义项目名称
project(untitled13001)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
# OpenCV 目录设置
set(OpenCV_DIR "G:\\Open412MinGw11.2viz")
# 查找 OpenCV 包
find_package(OpenCV REQUIRED)
# 包含 OpenCV 头文件目录
include_directories(${OpenCV_INCLUDE_DIRS})
# 查找项目中的所有 .cpp 源文件,排除 CMake 生成目录
file(GLOB_RECURSE SOURCES${CMAKE_SOURCE_DIR}/*.cpp${CMAKE_SOURCE_DIR}/*.hpp
)
# 手动排除掉 CMake 生成的 CMakeFiles 目录
list(FILTER SOURCES EXCLUDE REGEX "/CMakeFiles/")
# 将找到的文件添加到可执行文件中
add_executable(untitled13001 ${SOURCES})
# 链接 OpenCV 库
target_link_libraries(untitled13001 ${OpenCV_LIBS})
Pcl点云也可以在cmakelists.txt中设置
cmakelists.txt会根据 系统变量找pcl相关路径
cmake_minimum_required(VERSION 3.8)
project(PCLProject)# 设置C++标准
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# 查找Boost库
find_package(Boost REQUIRED COMPONENTS system thread date_time)# 查找PCL及其所有依赖项
find_package(PCL 1.14 REQUIRED)# 添加PCL的头文件目录
include_directories(${PCL_INCLUDE_DIRS})
include_directories(${Boost_INCLUDE_DIRS})# 添加编译选项
add_definitions(${PCL_DEFINITIONS})# 创建可执行文件
add_executable(${PROJECT_NAME} main.cpp)# 链接PCL库和Boost库
target_link_libraries(${PROJECT_NAME} ${PCL_LIBRARIES}${Boost_LIBRARIES}
)