cmake学习记录(一)
项目背景:s10缺陷检测需对基于halcon开发的代码移植到工程机中。
2020.6.3 反复查阅,已调通…
CMake 最低版本号要求
cmake_minimum_required(VERSION 3.10.2)
#项目信息
project(helloworld)
#和下一句一样定义根目录
set(HALCONROOT /opt/halcon)
if(DEFINED ENV{HALCONROOT} AND NOT $ENV{HALCONROOT} STREQUAL "")
message("Using HALCONROOT " $ENV{HALCONROOT})
STRING(REGEX REPLACE "\\\\" "/" HALCONROOT $ENV{HALCONROOT})
endif()
#寻找包的关键语句 文件夹中必须包含make文件下 里面有findpackage函数
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
find_package(Halcon)
set (INC_DIRS ${INC_DIRS} ${HALCON_INC_DIRS})
set (LIBS ${LIBS} ${HALCON_LIBS})
add_executable(helloworld hello.cpp)
INCLUDE_DIRECTORIES(/opt/halcon/include)
INCLUDE_DIRECTORIES(/opt/halcon/include/halconcpp)
INCLUDE_DIRECTORIES(/opt/halcon/include/halconc)
INCLUDE_DIRECTORIES(/opt/halcon/include/hdevengine)
INCLUDE_DIRECTORIES(/opt/halcon/include/com)
INCLUDE_DIRECTORIES(/opt/halcon/include/hlib)
#set(LINK_DIR /opt/halcon//lib/x64-win64)
#link_directories(${LINK_DIR})
target_link_libraries(${PROJECT_NAME} PUBLIC ${LIBS})
总结:
1.核心是找到头文件include和库文件lib,故其需要路径INCLUDE_DIRECTORIES和target_link_libraries 路径和路径及其名称,但是文件.a或.so很多时需要利用findpackage来找,findpackage又需要建立新的make文件夹才行。最后,编译的目的是生成可执行文件add_executable(helloworld hello.cpp)还是静态库add_library(${PROJECT_NAME} ${SOURCE} ${HEADER})。
2.多去看看halcon生成的cmakelists。
3.Cmake. 位置决定外部编译还是内部编译,即cmakefile在那里,而make是基于cmakefile来进行编译的。
4.Include和lib是一体的,声明与实现。在我理解的角度,和函数所在位置类似
在main之前定义函数,同一个cpp。
保证代码简约直观,自定义一个类,封装在同一个项目中。
第三方库,需要引用必须按照路径搜索调用。
5.明白一个工作文件都要哪些部分?而安装好的软件又有哪些部分?
Include、lib、bin、src、dos、example、lisence