Cmake 构建

本文仅作为个人的学习记录

1.Cmake学习记录

1.搜索文件

aux_source_directory(< dir > < variable >)

dir:要搜索的目录

variable:存储dir目录

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})

file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)

GLOB: 将指定目录下搜索到的满足条件的所有文件名生成一个列表,并将其存储到变量中。
GLOB_RECURSE:递归搜索指定目录,将搜索到的满足条件的文件名生成一个列表,并将其存储到变量中。

示例:

file(GLOB MAIN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
file(GLOB MAIN_HEAD ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h)

2.包含头文件

include_directories(headpath)

()中指定头文件路径即可

3.包含库文件

链接静态库的命令如下:

link_libraries(<static lib> [<static lib>...])

指定第三方静态库路径:

link_directories(<lib path>)

示例:

cmake_minimum_required(VERSION 3.0)
project(CALC)
# 搜索指定目录下源文件
file(GLOB SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
# 包含头文件路径
include_directories(${PROJECT_SOURCE_DIR}/include)
# 包含静态库路径
link_directories(${PROJECT_SOURCE_DIR}/lib)
# 链接静态库
link_libraries(calc)
add_executable(app ${SRC_LIST})
来源: 爱编程的大丙  链接: https://subingwen.cn/cmake/CMake-primer/

4.总结通用模板

# cmake_minimum_required
# project()


# include_directories()		引入头文件

# link_libraries()	链接静态库文件

# add_executable()	生成可执行程序	or add_library()	生成库文件

# target_link_libraries()	链接动态库文件(也可链接静态库)

2.项目示例

简介:实现点云配准算法继承与验证Demo,需要使用到QT VTK PCL库,通过cmake实现子目录划分。将主界面函数设置为生成可执行文件,通过调用各类算法的静态库文件,实现点云导入、配准和可视化。

目录文件树

Project/
├── CMakeLists.txt
├── MainWindow/
│   ├── CMakeLists.txt
│   ├── MainWindow.h
│   ├── MainWindow.cpp
│   ├── MainWindow.ui
│   ├── MainWindow.qrc
│   └── main.cpp
├── ICP/
│   ├── CMakeLists.txt
│   ├── ICP.h
│   └── ICP.cpp
├── PlaneICP/
│   ├── CMakeLists.txt
│   ├── PlaneICP.h
│   └── PlaneICP.cpp
├── MyAlgorithm/
│   ├── CMakeLists.txt
│   ├── MyAlgorithm.h
│   └── MyAlgorithm.cpp

source下CMakeLists

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(RegistrationDemo)
 
 #设置工程包含当前目录,包含头文件
set(cmake_include_current_dir on)

add_subdirectory(MainWindow)		
add_subdirectory(PlaneICP)		

MainWindow下CMakeLists

cmake_minimum_required(VERSION 3.10.0)
project(MainWindow)

#--------------------------QT--------------------------

set(Qt5_DIR E:/Qt/Qt5.9.4/5.9.4/msvc2017_64/lib/cmake/Qt5)
find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)

SET(CMAKE_AUTOMOC ON)
SET(CMAKE_AUTOUIC ON)
SET(CMAKE_AUTORCC ON)
#由于采用set(CMAKE_AUTOUIC ON)的方式处理ui文件,编译时会报错找不到ui文件。
#需要将ui文件夹加入AUTOUIC的搜索目录,这样AUTOUIC处理时才能找到ui文件。
set(CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_SOURCE_DIR}/ui)


#--------------------------VTK--------------------------

find_package(VTK REQUIRED)
include_directories(${VTK_INCLUDE_DIRS})


#----------------------------------------------------

link_libraries(${VTK_DIR}/bin/Debug PlaneICP)

include_directories(${CMAKE_SOURCE_DIR}/PlaneICP)

add_executable(MainWindow 
	main.cpp
	MainWindow.cpp
	MainWindow.h
	MainWindow.ui
	MainWindow.qrc
)

target_link_libraries(MainWindow Qt5::Core Qt5::Gui Qt5::Widgets ${VTK_LIBRARIES} ${QT_LIBRARIES})

Plane ICP下CMakeLists

cmake_minimum_required(VERSION 3.10.0)
project(PlaneICP)

#--------------------------PCL--------------------------
find_package(PCL 1.2 REQUIRED)
 
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

aux_source_directory(./ SRC)
add_library(PlaneICP ${SRC})
target_link_libraries (PlaneICP ${PCL_LIBRARIES})

3.待解决问题

需要在VS属性页环境变量处添加VTK dll文件目录

待实现的解决方案:

在vs mainwindow项目生成前事件添加命令行,调用copydll.cmake,将VTK dll文件目录复制到exe文件对应目录下。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值