CMakeLists学习记录

本文详细解析了CMakeLists.txt文件的常用指令,包括设置项目信息、管理源文件、添加库、链接预编译库、打印消息、变量操作及流程控制语句。通过实例展示了如何构建动态库、静态库以及处理复杂条件语句和循环结构,是理解CMake配置文件的实用教程。
摘要由CSDN通过智能技术生成

CMakeLists.txt 文件如下

#最低支持版本
cmake_minimum_required(VERSION 3.10.2)

#当前工程的名称
project("myapplication")

#通过file定义变量SOURCE,使用GLOB命令来从源码树中收集源文件列表,这里收集所有的cpp文件
#然后将收集到的文件路径存储在SOURCE变量
file(GLOB SOURCE *.cpp)

#aux_source_directory(dir 变量) 将指定目录下所有的源文件并存储在一个变量中
aux_source_directory(../../../../../../../Source/util utilSource)

#添加库,构建的时候最终会根据配置生成相应的库
add_library(
        test-lib #指定了库的名称

        SHARED  #SHARED 表示生成动态库;    STATIC 表示生成静态库

        ${SOURCE} #将SOURCE变量指代的所有源文件编译到库中
        ${utilSource} #将utilSource变量指代的所有源文件编译到库中
)

#find_library(变量 library)查找到指定的预编译库,并将它的路径存储在变量中。
#查找ndk的log库 赋给变量log-lib
find_library(
        log-lib
        log)

#将log-lib指代的log库链接到test-lib中。可以链接动态库或链接静态库
target_link_libraries(
        # 目标库
        test-lib
        # 目标库需要链接的库
        ${log-lib})

#打印消息
#第一个参数是消息的等级 不填默认就是重要消息
message("重要消息")
message(STATUS "非重要消息")
message(WARNING "警告消息")

#声明变量 set(变量名 变量值) ,cmake中所有的变量都是string类型
set(NAME 张三)
set(AGE 12)
message(WARNING "name is ${NAME},age is ${AGE}") # name is 张三,age is 12
#unset(变量名) 用来移除一个变量
unset(NAME)
message(WARNING "name is ${NAME},age is ${AGE}") #name is ,age is 12

#声明列表 set(变量名 value1 value2 value3...)set(变量名 "value1;value2;value3...")
set(list1 张三 李四 王武)
set(list2 "张三;李四;王武")
message(WARNING "list1 is ${list1}") #list1 is 张三;李四;王武
message(WARNING "list2 is ${list2}") #list2 is 张三;李四;王武
unset(list1)
unset(list2)

#流程控制语句
# 真 可以用(1、TRUE、ON、YES、Y、非0值)表示
# 假 可以用(0、FALSE、OFF、NO、NOTFOUND)表示
## if条件语句
set(COD1 OFF)
set(COD2 ON)
if (${COD1})
    message(WARNING 111)
elseif(${COD2})
    message(WARNING 222)
else()
    message(WARNING 333)
endif() #结束if语句
unset(COD1)
unset(COD2)

## while循环语句
set(a x)
#a STREQUAL "xxx" 等价于 a == xxx ; NOT a STREQUAL xxx 等价于 a != xxx
while(NOT a STREQUAL xxx)
    set(a ${a}x)
    message(WARNING ${a})
endwhile()
unset(a)

## for循环语句
#循环遍历【1234foreach(item 1 2 3 4)
    message(WARNING ${item})
endforeach()
#遍历列表 变量 IN LISTS 列表
set(list1 张三 李四 王武 小明)
foreach(item IN LISTS list1)
    message(WARNING ${item})
endforeach()

#函数
#函数申明
#function(函数名 参数1 参数2 参数3..)
    #函数体
    #ARGC 参数的个数
    #ARGV0 ARGV1 ARGV2...  参数0 参数1 参数2...
    #ARGV 所有参数
#endfunction()
function(printArgs x1 x2 x3)
    message(WARNING 参数x1=${x1},参数x2=${x2},参数x3=${x3})
    message(WARNING 参数个数=${ARGC})
    message(WARNING 第一个参数=${ARGV0},第二个参数=${ARGV1},第三个参数=${ARGV2})
    message(WARNING 所有参数=${ARGV})
endfunction()
#函数调用
printArgs(hello1 haha nihao)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值