CMakeList学习

想要学习CMake,感谢玛丽把我往死里卷QAQ


前言

之前一直想学习的来着,可惜因为时间不够或者别的因素一直耽搁了,好的,就是我太懒了QAQ


一、Cmake是什么?

CMake,这个问题等我学完了再来回答也不迟

二、使用步骤

1.老规矩先认识一些基本的代码

cmake_minimum_required (VERSION 3.8)

project ("Cmake_TEST")

# 包含子项目。
add_subdirectory ("Cmake_TEST")

以上这些代码是VS自带的感觉十分好用呢QAQ

2. 发现学习效率过慢,还是学习别人的好

先把玛丽的代码拿来学习一下:

cmake_minimum_required(VERSION 3.1)
project(MaaAssistantArknights)

if (NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Release)
endif ()

option(BUILD_TEST "build a demo" OFF)
option(BUILD_XCFRAMEWORK "build xcframework for macOS app" OFF)
option(BUILD_UNIVERSAL "build both arm64 and x86_64 on macOS" OFF)

if (BUILD_UNIVERSAL)
    set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64")
endif ()

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if (MSVC)
    add_compile_options("/utf-8")
    add_compile_options("/MP")

    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")

    add_compile_options("/W4;/WX")
else ()
    add_compile_options("-Wall;-Wextra;-Wpedantic")
endif ()

add_definitions(-DASST_DLL_EXPORTS)
if (MSVC)
    #注意:相比VS版本缺少了 -D_CONSOLE -D_WINDLL 两项
    add_definitions(-D_UNICODE -DUNICODE)
endif ()

include_directories(include)
include_directories(src/MeoAssistant)

file(GLOB_RECURSE maa_src src/MeoAssistant/*.cpp)

add_library(MeoAssistant SHARED ${maa_src})

if (MSVC)
    find_library(PaddleOCR_LIB NAMES ppocr PATHS 3rdparty/lib)
    find_library(OpenCV NAMES opencv_world453 PATHS 3rdparty/lib)
    find_library(ZLIB NAMES zlibstatic PATHS 3rdparty/lib)
    target_link_libraries(MeoAssistant ws2_32 ${OpenCV} ${PaddleOCR_LIB} ${ZLIB})
    target_include_directories(MeoAssistant PRIVATE 3rdparty/include)
else ()
    find_package(ZLIB REQUIRED)
    target_include_directories(MeoAssistant PRIVATE ${ZLIB_INCLUDE_DIRS})
    target_link_libraries(MeoAssistant ${ZLIB_LIBRARY})

    if (CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
        find_package(range-v3 REQUIRED)
        target_link_libraries(MeoAssistant range-v3::range-v3)
    endif ()

    if (APPLE)
        set(CMAKE_OSX_DEPLOYMENT_TARGET 12.0)
        add_subdirectory(3rdparty/VisionOCR)
        target_link_libraries(MeoAssistant
            vnocr
            "-framework Accelerate"
        )
    else ()
        find_package(OpenCV REQUIRED)
        target_include_directories(MeoAssistant PRIVATE ${OpenCV_INCLUDE_DIRS})
        target_link_libraries(MeoAssistant ${OpenCV_LIBS})

        target_link_libraries(MeoAssistant ppocr paddle_inference protobuf cryptopp gflags glog utf8proc xxhash iomp5 mkldnn mklml_intel)
    endif (APPLE)

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -idirafter ${PROJECT_SOURCE_DIR}/3rdparty/include")
endif ()

if (BUILD_TEST)
    add_executable(test tools/TestCaller/main.cpp)
    target_link_libraries(test MeoAssistant)
endif (BUILD_TEST)

if (BUILD_XCFRAMEWORK)
    add_custom_command(OUTPUT MeoAssistant.xcframework
        COMMAND rm -rf MeoAssistant.xcframework
        COMMAND xcodebuild -create-xcframework -library libMeoAssistant.dylib -headers ${PROJECT_SOURCE_DIR}/include -output MeoAssistant.xcframework
        DEPENDS MeoAssistant
    )

    add_custom_target(MaaXCFramework ALL
        DEPENDS MeoAssistant MeoAssistant.xcframework
    )
endif (BUILD_XCFRAMEWORK)

# define MAA_VERSION from git
if (NOT MAA_VERSION)
    find_package(Git)
endif ()
if (GIT_FOUND)
    execute_process(
        COMMAND "${GIT_EXECUTABLE}" describe --tags --dirty --broken --abbrev=40
        WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
        RESULT_VARIABLE result
        OUTPUT_VARIABLE output
        ERROR_VARIABLE err
        OUTPUT_STRIP_TRAILING_WHITESPACE
    )
    if (result EQUAL 0)
        set(MAA_VERSION "${output}")
    else ()
        message(WARNING "git describe returning ${result}, output:\n${err}")
    endif()
endif ()
if (NOT MAA_VERSION AND GIT_FOUND)
    execute_process(
        COMMAND "${GIT_EXECUTABLE}" rev-parse HEAD
        WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
        RESULT_VARIABLE result
        OUTPUT_VARIABLE output
        ERROR_VARIABLE err
        OUTPUT_STRIP_TRAILING_WHITESPACE
    )
    if (result EQUAL 0)
        set(MAA_VERSION "${output}")
    else ()
        message(WARNING "git rev-parse returning ${result}, output:\n${err}")
    endif ()
endif ()
if (NOT MAA_VERSION)
    set(MAA_VERSION "DEBUG VERSION")
endif ()
message(STATUS "MAA_VERSION=${MAA_VERSION}")
add_compile_definitions(MAA_VERSION="${MAA_VERSION}")

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了CMake的使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值