0%

cmake说明

2018年12月23日 下午1:43

cmake的一些补充资料:

配置环境变量(头文件,链接库目录,宏定义)的等价方式:CMake 添加头文件目录,链接动态、静态库(添加子文件夹) - Zhang’s Wikipedia - CSDN博客

find_package (Qt5 REQUIRED COMPONENTS Widgets Core) 来历:
c++ - Ubuntu CMake what path to add to CMAKE_MODULE_PATH - Stack Overflow

TARGET_LINK_LIBRARIES (showPointCloud Qt5::Widgets):来历
c++ - Cmake and QT5 - Include only takes one argument - Stack Overflow

要使工程可以使用Qt5的UI和信号槽机制,则需要分别包含UIC功能和MOCCLion+Qt5环境配置 - kestiny的专栏 - CSDN博客
使用CLion开发Qt应用 | 白季飞龙的个人主页

给cmake更换编译器(我们项目中只能使用clang,因为brew安装了软件软件clang编译的,gcc无法使用)
How to specify new GCC path for CMake - Stack Overflow

跨平台的cmake:
CMake与动态链接库(dll, so, dylib) - yushulx的个人页面 - 开源中国
设置open-mesh链接库
OpenMesh: How to create your own project using OpenMesh

Cmakelist.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#set(CMAKE_PREFIX_PATH "/usr/local/Cellar/qt/5.12.0/lib/cmake")
#set(CMAKE_CXX_STANDARD 11)

#否则cgal会无法链接,报错:ld: symbol(s) not found for architecture x86_64
#或者,在clion中设置为release编译也可以
SET(CMAKE_BUILD_TYPE Release)

#给qt设置的选项
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
#否则编译的时候找不到ui_**.cpp
set(CMAKE_INCLUDE_CURRENT_DIR ON)

#find package之后,这个package会告诉cmake自己库的很多信息
#正常来说,brew install 之后就可以直接find到。安装的软件中他自己就有方便让别人使用的cmake文件夹
#其实,我们可以直接去看我们要find_package的软件,他的cmake是怎么写的,他定义了那些内容可以方便我们使用。这就是一个阅读源码的过程
find_package (PCL 1.9 REQUIRED)
find_package (Qt5 REQUIRED COMPONENTS Widgets Core)
find_package (VTK REQUIRED)#vtk cmake路径位置:/usr/local/Cellar/vtk/8.1.2/lib/cmake/vtk-8.1
find_package (CGAL REQUIRED)

#message(STATUS "---1--" ${GMP_INCLUDE_DIRS} )
#message(STATUS "---2---" ${PCL_LIBRARY_DIRS} )
#message(STATUS "---3---" ${GMP_DEFINITIONS} )

message(STATUS "---1--" ${PCL_LIBRARY_DIRS} )

#设置包含的头文件和库目录路径
include_directories (${PCL_INCLUDE_DIRS} ${CGAL_INCLUDE_DIRS} ${GMP_INCLUDE_DIRS} "/usr/local/Cellar/open-mesh/7.1/include")
link_directories (${PCL_LIBRARY_DIRS} ${CGAL_LIBRARY_DIRS} ${GMP_LIBRARY_DIRS} "/usr/local/Cellar/open-mesh/7.1/lib")
add_definitions (${PCL_DEFINITIONS} ${CGAL_DEFINITIONS} ${GMP_DEFINITIONS})

set (project_SOURCES
main.cpp
ConstrainedDelaunayTriangulation.cpp
ControlOptimizationSnappingDialog.cpp
Dialog.cpp
EarClip.cpp
EarClip2.cpp
HiDialog.cpp
HoleFilling.cpp
HoleFillingInteractiveOperationDialog.cpp
OSnap.cpp
PCLViewer.cpp
PlaneDetectSetParamDialog.cpp
RegulateNormalDialog.cpp
RemovePointCloudDialog.cpp
SetBGColorDialog.cpp
SetParams_Mergingvertices_Dialog.cpp
SetParams_SimpilyVerticessize_Dialog.cpp
SetPointCloudProDialog.cpp
SimplifyVerticesSize.cpp
snappingvertices.cpp)
set (project_HEADERS
Commen.h
ConstrainedDelaunayTriangulation.h
ControlOptimizationSnappingDialog.h
Dialog.h
EarClip.h
EarClip2.h
Event.h
HeaderFile.h
HiDialog.h
HoleFilling_PLY.h
HoleFilling.h
HoleFillingInteractiveOperationDialog.h
initialPoly.h
OSnap.h
PCLViewer.h
PlaneDetect.h
PlaneDetectSetParamDialog.h
Registration.h
RegulateNormalDialog.h
RemovePointCloudDialog.h
SetBGColorDialog.h
SetParams_Mergingvertices_Dialog.h
SetParams_SimpilyVerticessize_Dialog.h
SetPointCloudProDialog.h
SimplifyVerticesSize.h
snappingvertices.h
TriangularMeshing.h)
set (project_FORMS
ControlOptimizationSnappingDialog.ui
Dialog.ui
HiDialog.ui
HoleFillingInteractiveOperationDialog.ui
PCLViewer.ui
PlaneDetectSetParamDialog.ui
RegulateNormalDialog.ui
RemovePointCloudDialog.ui
SetBGColorDialog.ui
SetParams_Mergingvertices_Dialog.ui
SetParams_SimpilyVerticessize_Dialog.ui
SetPointCloudProDialog.ui)

#我这里偷了个懒,在链接的过程中,我直接将所有的依赖库全部加进来了,这样最起码不会少!
#set (VTK_LIBRARIES vtkRenderingCore vtkGraphics vtkHybrid QVTK )#依赖库路径位置:/usr/local/Cellar/vtk/8.1.2/lib/cmake/vtk-8.1
#set (GMP_LIBRARIES libgmp-10 libmpfr-4)
#set (CGAL_LIBRARIES CGAL_Core-vc100-mt-4.7 CGAL_Core-vc100-mt-gd-4.7 CGAL-vc100-mt-4.7 CGAL-vc100-mt-gd-4.7)


QT5_WRAP_CPP (project_HEADERS_MOC ${project_HEADERS})
QT5_WRAP_UI (project_FORMS_HEADERS ${project_FORMS})

ADD_DEFINITIONS (${QT_DEFINITIONS})

ADD_EXECUTABLE (showPointCloud ${project_SOURCES}
${project_FORMS_HEADERS}
${project_HEADERS_MOC})

#对应于软件link的过程
TARGET_LINK_LIBRARIES (showPointCloud ${PCL_LIBRARIES} ${VTK_LIBRARIES} ${CGAL_LIBRARIES} ${GMP_LIBRARIES})
TARGET_LINK_LIBRARIES (showPointCloud Qt5::Widgets)
TARGET_LINK_LIBRARIES (showPointCloud OpenMeshCore)
TARGET_LINK_LIBRARIES (showPointCloud OpenMeshTools)