CMAKE常用函数及例程

一、官方网站:  

CMakehttps://cmake.org/

二、介绍内容:

       CMake is an open-source, cross-platform family of tools designed to build, test and package software. CMake is used to control the software compilation process using simple platform and compiler independent configuration files, and generate native makefiles and workspaces that can be used in the compiler environment of your choice. The suite of CMake tools were created by Kitware in response to the need for a powerful, cross-platform build environment for open-source projects such as ITK and VTK.CMake is part of Kitware’s collection of commercially supported open-source platforms for software development.

        CMake是一个开源、跨平台的工具系列,旨在构建、测试和打包软件。CMake用于使用简单的平台和编译器独立的配置文件控制软件编译过程,并生成可在您选择的编译器环境中使用的本机makefile和工作区。CMake工具套件是由Kitware创建的,以响应对一个强大的、跨平台的开源项目(如ITK和VTK)构建环境的需求。CMake是Kitware一系列商业支持的开源软件开发平台的一部分。

 

      直白解释:CMAKE通过统一的接口函数,生成各平台编译工具认识的makefile文件,取代了我们编写makefile的麻烦,减轻了我们程序猿的工作量。

三、例程:

cmake_minimum_required(VERSION 3.15)
project(XXXXXXXXXX)
set(CMAKE_CXX_STANDARD 11)

# ==============================================================
# 路径输出确认
MESSAGE(STATUS "CMAKE_BINARY_DIR is :" ${CMAKE_BINARY_DIR})
MESSAGE(STATUS "PROJECT_BINARY_DIR is :" ${PROJECT_BINARY_DIR})

# ==============================================================
# .a  .so 输出路径重新设置
#SET(LIBRARY_OUTPUT_PATH  ${PROJECT_BINARY_DIR}/../library)
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY  ${PROJECT_BINARY_DIR}/../library)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY  ${PROJECT_BINARY_DIR}/../bin)

# 可执行文件输出路径设置
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY  ${PROJECT_BINARY_DIR}/../bin)



# ==============================================================
# 添加子工程目录
add_subdirectory(source/XXXXXXXX)
#并指定输入目录
add_subdirectory(source/XXXXXXX library)

# ==============================================================
#MESSAGE(STATUS "CMAKE_ARCHIVE_OUTPUT_DIRECTORY is :" ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
#MESSAGE(STATUS "CMAKE_LIBRARY_OUTPUT_DIRECTORY is :" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
#MESSAGE(STATUS "CMAKE_RUNTIME_OUTPUT_DIRECTORY is :" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})

# ==============================================================
#set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
#set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

# ==============================================================
# 单独对目标进行指定
#set_target_properties(DataCollector.exe
#        PROPERTIES
#        ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/library"
#        LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
#        RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
#SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

MESSAGE(STATUS "Utils project CMAKE_BINARY_DIR is :" ${CMAKE_BINARY_DIR})

#INSTALL(FILES ./Utils.h DESTINATION ${CMAKE_BINARY_DIR}/../include)

#生成库文件
add_library(Utils STATIC Utils.cpp)

# 文件复制操作
file(COPY ./Utils.h DESTINATION ${CMAKE_BINARY_DIR}/../include/)

四、常见函数及使用

1、添加链接库所在的目录:

link_directories("./libs")

2、添加包含的头文件目录:

include_directories("./include")

3、添加子cmakelist.txt文件:

add_subdirectory("./3dparty/opencv")#也就是包含opencv文件夹下面的makelist.txt

4、设置输出目录:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")

5、设置c++编译选项:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

6、生成链接库:

add_library(faceattribute ${sourcefile})

7、生成可执行文件:

ADD_EXECUTABLE(lightpredict test/lightpredict.cpp )

8、链接第三方库:

#REQUIRED表示opencv是必须找到的,如果找不到就会报错

find_package( OpenCV REQUIRED )

#添加opencv的include路径

INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS}

#链接opencv库文件

target_link_libraries(predict ${OpenCV_LIBS})

9、消息、变量打印:

set(mymessage "This is a message print!")

message(WARNING "${mymessage}")

10、搜索指定目录下所有源文件:

#搜索目录./src下面所有源文件,赋值给变量src

aux_source_directory("./src" src)

message(WARNING "${src}")

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要确认你的处理器能够支持AVX2指令集。如果不支持,那么无法使用AVX2指令集加速。 接下来,需要在VS2017中修改编译选项,以使用AVX2指令集。具体操作如下: 1. 打开项目属性窗口,选择“C/C++” -> “代码生成”。 2. 在“处理器”下拉菜单中选择“AVX2 (/arch:AVX2)”选项。 3. 点击“应用”按钮保存更改。 完成上述步骤后,需要重新编译opencv4.5.5,使其支持AVX2指令集。具体操作如下: 1. 下载opencv4.5.5源代码,并使用CMake生成VS2017项目。 2. 在CMake中,设置以下选项: - BUILD_SHARED_LIBS = OFF - ENABLE_AVX2 = ON 3. 生成VS2017项目,并编译生成opencv4.5.5库。 完成编译后,可以在VS2017中创建一个新项目,添加opencv4.5.5库文件,并使用AVX2指令集加速warpaffine函数。具体操作如下: 1. 在项目中添加以下头文件: ``` #include <opencv2/core/avx2.hpp> #include <opencv2/imgproc.hpp> ``` 2. 使用AVX2指令集加速warpaffine函数,代码示例如下: ``` cv::Mat src, dst; cv::Mat M = cv::getRotationMatrix2D(cv::Point2f(src.cols / 2.f, src.rows / 2.f), 45, 1); cv::warpAffine(src, dst, M, src.size(), cv::WARP_INVERSE_MAP | cv::INTER_LINEAR, cv::BORDER_CONSTANT, cv::Scalar()); cv::avx2::warpAffine(src, dst, M, src.size(), cv::WARP_INVERSE_MAP | cv::INTER_LINEAR, cv::BORDER_CONSTANT, cv::Scalar()); ``` 注意,AVX2指令集加速的warpaffine函数是cv::avx2::warpAffine,而不是cv::warpAffine。 完成上述步骤后,即可使用AVX2指令集加速warpaffine函数带参数WARP_INVERSE_MAP的例程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值