You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
5.9 KiB
CMake

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

cmake_minimum_required (VERSION 3.10)
# 交叉编译相关
option (USE_CROSS
"Use CROSSCOMPILE" OFF)
if (USE_CROSS)
# 即你目标机target所在的操作系统名称比如ARM或者Linux你就需要写"Linux",如果Windows平台你就写"Windows",如果你的嵌入式平台没有相关OS你即需要写成"Generic",只有当CMAKE_SYSTEM_NAME这个变量被设置了CMake才认为此时正在交叉编译它会额外设置一个变量CMAKE_CROSSCOMPILING为TRUE.
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1.0)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
# TOOLSCHAIN_PATH 位置一般是bin lib include 和aarch64-...的目录
set(TOOLSCHAIN_PATH "/home/wcl/emd_dev/n1/openwrt-toolchain-armvirt-64_gcc-8.4.0_musl.Linux-x86_64/toolchain-aarch64_cortex-a53_gcc-8.4.0_musl/")
set(TOOLCHAIN_HOST "${TOOLSCHAIN_PATH}/bin/aarch64-openwrt-linux")
# 即C语言编译器这里可以将变量设置成完整路径或者文件名设置成完整路径有一个好处就是CMake会去这个路径下去寻找编译相关的其他工具比如linker,binutils等如果你写的文件名带有arm-elf等等前缀CMake会识别到并且去寻找相关的交叉编译器。
set(CMAKE_C_COMPILER ${TOOLCHAIN_HOST}-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_HOST}-g++)
SET(CMAKE_BUILD_TYPE "Release")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall")
# 代表了一系列的相关文件夹路径的根路径的变更,比如你设置了/opt/arm/,所有的Find_xxx.cmake都会优先根据这个路径下的/usr/lib,/lib等进行查找然后才会去你自己的/usr/lib和/lib进行查找如果你有一些库是不被包含在/opt/arm里面的你也可以显示指定多个值给CMAKE_FIND_ROOT_PATH,比如set(CMAKE_FIND_ROOT_PATH /opt/arm /opt/inst)
set(CMAKE_FIND_ROOT_PATH ${TOOLSCHAIN_PATH})
# 对FIND_PROGRAM()起作用,有三种取值NEVER,ONLY,BOTH,第一个表示不在你CMAKE_FIND_ROOT_PATH下进行查找第二个表示只在这个路径下查找第三个表示先查找这个路径再查找全局路径对于这个变量来说一般都是调用宿主机的程序所以一般都设置成NEVER
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# 对FIND_LIBRARY()起作用表示在链接的时候的库的相关选项因此这里需要设置成ONLY来保证我们的库是在交叉环境中找的.
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
# 对FIND_PATH()和FIND_FILE()起作用一般来说也是ONLY,如果你想改变一般也是在相关的FIND命令中增加option来改变局部设置有NO_CMAKE_FIND_ROOT_PATH,ONLY_CMAKE_FIND_ROOT_PATH,BOTH_CMAKE_FIND_ROOT_PATH
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# 对于Qt用户来说需要更改相关的qmake命令切换成嵌入式版本因此这里需要指定成相应的qmake路径指定到qmake本身
# SET(QT_QMAKE_EXECUTABLE /opt/qt-embedded/qmake)
# 对于需要boost库的用户来说相关的boost库路径配置也需要设置因此这里的路径即ARM下的boost路径里面有include和lib。
# SET(BOOST_ROOT /opt/boost_arm)
# cmake内置命令不区分大小写
endif (USE_CROSS)
# 项目名称
project (dehazing)
# The version number.
set (DEHAZE_VERSION_MAJOR 5)
set (DEHAZE_VERSION_MINOR 0)
# configure a header file to pass some of the CMake settings
# to the source code
configure_file (
"${PROJECT_SOURCE_DIR}/VersionConfig.h.in"
"${PROJECT_SOURCE_DIR}/VersionConfig.h"
)
# 安装路径
set(CMAKE_INSTALL_PREFIX "${PROJECT_BINARY_DIR}/install")
# 链接库路径操作
set(INSTALL_LIB_DIR $ORIGIN "../lib" "./lib") # 假设安装目录在编译目录的lib子目录内和当前文件夹这里写成了列表的形式
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
set(CMAKE_INSTALL_RPATH "${INSTALL_LIB_DIR}")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) # 存在上面一句,此句好像没有用
# Try to find OpenCV
find_package(OpenCV 3)
if (OpenCV_FOUND)
# If the package has been found, several variables will
# be set, you can find the full list with descriptions
# in the OpenCVConfig.cmake file.
# Print some message showing some of them
message(STATUS "OpenCV library status:")
message(STATUS " version: ${OpenCV_VERSION}")
message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")
else ()
message(FATAL_ERROR "Could not locate OpenCV")
endif()
# zlog
option (USE_ZLOG
"Use tutorial provided math implementation" ON)
if (USE_ZLOG)
add_subdirectory (zlog_manager)
set (EXTRA_INCS ${EXTRA_INCS} ${ZLOG_INCLUDE_DIR})
message (">>> value = ${EXTRA_INCS}")
set (EXTRA_LIBS ${EXTRA_LIBS} zlog_manager)
message (">>> value = ${EXTRA_LIBS}")
endif (USE_ZLOG)
# 其他宏定义选项
option (USE_DEHAZE01
"Use No. 1 alg" ON)
if (USE_DEHAZE01)
add_subdirectory(dehazing01)
set (EXTRA_INCS ${EXTRA_INCS} ${DEHAZE01_INCLUDE_DIR})
message (">>> value = ${EXTRA_INCS}")
set (EXTRA_LIBS ${EXTRA_LIBS} LIB_DEHAZE01)
message (">>> value = ${EXTRA_LIBS}")
endif (USE_DEHAZE01)
# 头文件路径
include_directories("${PROJECT_SOURCE_DIR}")
include_directories("${PROJECT_SOURCE_DIR}/zlog_manager/")
include_directories("${EXTRA_INCS}")
# 因为是使用add_subdirectory的方式所以库文件路径不用再加link_directories
add_executable (dehazing main.cpp)
target_link_libraries (dehazing ${EXTRA_LIBS} ${OpenCV_LIBS})
# 安装库文件安装位置在子cmake文件中指定
install (TARGETS dehazing DESTINATION bin)
install (FILES "VersionConfig.h" DESTINATION include)
# 测试模式
# enable_testing()
# #define a macro to simplify adding tests, then use it
# macro (do_test arg result)
# add_test (TutorialComp${arg} Tutorial ${arg})
# set_tests_properties (TutorialComp${arg}
# PROPERTIES PASS_REGULAR_EXPRESSION ${result})
# endmacro (do_test)
# # do a bunch of result based tests
# do_test (25 "25 is 5")
# do_test (-25 "-25 is 0")