cmake_minimum_required(VERSION 3.20)

project(hello CXX)

if(FALSE AND (1+1>2))
    message("满足条件")
else()
    message("不满足条件")
endif()

# 括号参数
message(MAJOR_VERSION:${CMAKE_MAJOR_VERSION}) # MAJOR_VERSION:3
message([[MAJOR_VERSION:${CMAKE_MAJOR_VERSION}]]) # MAJOR_VERSION:${CMAKE_MAJOR_VERSION}
message([=[This is the first line in a bracket argument with bracket length 1]=])
message([=[This is the first line in a bracket argument with bracket length 1.
No \-escape sequences or ${variable} references are evaluated.
This is always one argument even though it contains a ; character.
The text does not end on a closing bracket of length 0 like ]].
It does end in a closing bracket of length 1.
]=])

# 引号参数
message("MAJOR_VERSION:${CMAKE_MAJOR_VERSION}") # MAJOR_VERSION: 3

# 非引号参数
foreach(arg
    NoSpace
    Into;Five;Arguments
    Escaped\;Semicolon;
    )
  message("${arg}")
endforeach()

# 变量引用
message("CMAKE_MINOR_VERSION:${CMAKE_MINOR_VERSION}")
set(HELLO "HELLO")
set(HELLO_WROLD "Hello, World!")
message("${HELLO}")
message("${${HELLO}_WROLD}")

# This is a line comment \n hh #.
message("First Argument\n" # This is a line comment :)
        "Second Argument") # This is a line comment.

#[[This is a bracket comment.
It runs until the close bracket.]]
message("First Argument\n" #[[Bracket Comment]] "Second Argument")


# 条件语句
set(NUM 10)
if(NUM LESS 5)
    message("NUM 小于 5")
elseif(NUM EQUAL 5)
    message("NUM 等于 5")
else()
    message("NUM 大于 5")
endif()


# 循环语句
set(my_list 1 2 3 4 5)

foreach(item IN LISTS my_list)
    if(item STREQUAL "5")
        message("遇到了5，终止循环")
        break()
    endif()

    if(item STREQUAL "4")
        message("遇到了${item}，跳过这次迭代")
        continue()
    endif()

    message("当前项为: ${item}")
endforeach()


macro(print_message message_text)
    message("消息内容: ${message_text}")
endmacro()

# 调用宏
print_message("这是一个测试消息")



# list

# 创建一个包含字符串的列表
set(my_list "apple" "banana" "cherry")

# 遍历列表中的元素并输出
foreach(item IN LISTS my_list)
    message("Item: ${item}")
endforeach()

# 向列表添加元素
list(APPEND my_list "date")

# 输出更新后的列表
message("Updated List: ${my_list}")

# 获取列表长度
list(LENGTH my_list list_length)
message("List Length: ${list_length}")

# 获取列表指定索引处的元素
list(GET my_list 1 element)
message("Element at index 1: ${element}")

# 删除列表中的元素
list(REMOVE_ITEM my_list "banana")

# 输出更新后的列表
message("List after removing 'banana': ${my_list}")


set(srcs a.c b.c c.c)
message("srcs: ${srcs}")

set(x a "b;c")
message("x: ${x}")

add_executable(hello hello.cpp)

