Cmake中 set、include、find_package 、add_definitions语句解析

cmake 片段代码:  

######################################################################################################################
#   COPYRIGHT                                                                                                        #
#   -----------------------------------------------------------------------------------------------------------------#
#             This software is copyright protected and proprietary to Neusoft Reach.                                 #
#             Neusoft Reach grants to you only those rights as set out in the license conditions.                    #
#             All other rights remain with Neusoft Reach.                                                            #
#   -----------------------------------------------------------------------------------------------------------------#
# ####################################################################################################################
cmake_minimum_required(VERSION 3.2)
set(CMAKE_VERBOSE_MAKEFILE on)
include(GNUInstallDirs)

# Common Library--------------------------------------------------------------
find_package(ara-exec REQUIRED)
find_package(AdaptivePlatform REQUIRED)
find_package(ara-log REQUIRED)
find_package(Threads REQUIRED)

# Application Related --------------------------------------------------
add_definitions(-DHAS_VSOMEIP_BINDING)
find_package(ara-com REQUIRED) 
find_package(e2e REQUIRED) 
find_package(e2exf REQUIRED)
find_package(foonathan_memory REQUIRED)

set :

      

set(<variable> <value>... [PARENT_SCOPE]) #设置普通变量
set(<variable> <value>... CACHE <type> <docstring> [FORCE]) #设置缓存条目
set(ENV{<variable>} [<value>]) #设置环境变量

  set命令可以设置普通变量、缓存条目、环境变量三种变量的值 

    eg:  set(CMAKE_VERBOSE_MAKEFILE ON)            //Cmake 过程显示编译过程的详细信息 

include:

   include(<file|module> [OPTIONAL] [RESULT_VARIABLE <var>] [NO_POLICY_SCOPE])

  include 指定包括的文件或模块

    eg:  include(GNUInstallDirs)                           //导入GNUInstallDirs模块,定义一组标准变量用于安装不同类型文件到规范的指定目录

           include(test.cmake)                                 //test.camke 是模块文件,一些重复使用语句代码可以写在.cmake文件中

find_package:

     find_package(LAPACK REQUIRED)

      查找程序编译必须安装的库, REQUIRED:必须找到该库否则停止, 以linux系统为例find_package通常去usr/local/lib/cmake/和 CMAKE_MODULE_PATH 指定目录下去找 ara-exec.make文件(以上面代码为例),从这个cmake文件获取到我们我们需要ara-exec库所需的头文件和库文件的路径。Cmake之深入理解find_package()的用法 - 知乎这位博主写的很清晰

 add_definitions:

      类似于C语言中定义一个宏。

      下面代码是在shell脚本中指定指定程序宏和Cmake中宏的判定和指定

make.sh
if [ $1 = "release" ] && [ $2 = "system" ];then
    board_type="system"
	cmake -DCMAKE_BUILD_TYPE=Release -DBOARD_TYPE=system ../
elif [ $1 = "release" ] && [ $2 = "control" ];then
    board_type="control"
	cmake -DCMAKE_BUILD_TYPE=Release -DBOARD_TYPE=control ../
elif [ $1 = "debug" ] && [ $2 = "system" ];then
    board_type="system"
	cmake -DCMAKE_BUILD_TYPE=Debug -DBOARD_TYPE=system ../
elif [ $1 = "debug" ] && [ $2 = "control" ];then
    board_type="control"
	cmake -DCMAKE_BUILD_TYPE=Debug -DBOARD_TYPE=control ../
else
    echo "parameter is not correct \n"
	exit 1
fi
IF(CMAKE_BUILD_TYPE MATHCHES Debug)
     ADD_DEFINITONS(-Dm32 -g -O0 -DARP_DECLARE_STATIC
	                -DARP_HAS_DSO
					-DAPU_DECLARE_STATIC
					-D_GNU_SOURCE
					-D_DEBUG)
ELSEIF (CMAKE_BUILD_TYPE MATHCHES Release)
      ADD_DEFINITONS(-Dm32  -DARP_DECLARE_STATIC
	                -DARP_HAS_DSO
					-DAPU_DECLARE_STATIC
					-D_GNU_SOURCE)
ELSE()
     MESSAGE (STATUS "No DEFINITIONS")
ENDIF()
	 
IF(BOARD_TYPE MATCHES system)
    ADD_DEFINITONS(-DRUNTARGET=1)
ELSEIF(BOARD_TYPE MATCHES control)
    ADD_DEFINITONS(-DRUNTARGET=0)
ELSE()
    MESSAGE (STATUS "No DEFINITIONS")
ENDIF()

cmake_minimum_required(VERSION 3.16) project(QLibBridge LANGUAGES CXX) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt6 REQUIRED COMPONENTS Core Network) find_package(Qt6 REQUIRED COMPONENTS Core) # 设置静态库路径 set(DTENLog_DIR "${CMAKE_SOURCE_DIR}/thirdpart/DTENLog") set(DTENLog_INCLUDE_DIRS "${DTENLog_DIR}") # 头文件目录 set(DTENLog_LIBRARY "${DTENLog_DIR}/lib/DTENLog.lib") # 静态库文件 # 添加静态库的头文件路径 include_directories(${DTENLog_INCLUDE_DIRS}) # 配置 Windows 版本信息 if(CMAKE_SYSTEM_NAME MATCHES "Windows") # 设置 Release 模式的运行时库为静态链接 (/MT) if(MSVC) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") endif() else() message(STATUS "Non-Windows platform detected, setting version properties...") SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${CurVersion} SOVERSION 1) endif() #生成 # add_library(QLibBridge SHARED # bridge.cpp bridge.h bridgemgr.cpp bridgemgr.h bridgemsg.h LogInit.h packettcpmsg.cpp packettcpmsg.h # LibBridge.cpp # ) # 生成可执行程序 add_executable(QLibBridge LibBridge.cpp bridge.cpp bridge.h bridgemgr.cpp bridgemgr.h bridgemsg.h LogInit.h packettcpmsg.cpp packettcpmsg.h udpserver.h udpserver.cpp qtappmanager.h qtappmanager.cpp ) target_link_libraries(QLibBridge PRIVATE Qt6::Core) # 链接静态库和动态库 target_link_libraries(${PROJECT_NAME} PRIVATE ${DTENLog_LIBRARY} PRIVATE Qt${QT_VERSION_MAJOR}::Core PRIVATE Qt${QT_VERSION_MAJOR}::Network ) target_compile_definitions(QLibBridge PRIVATE QLIBBRIDGE_LIBRARY) 在这个里面加系统库iphlpapi.lib
最新发布
08-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水火汪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值