CMake学习

1
cmake_minimum_required(VERSION 3.10)

cmake_minimum_required指令用于声明该脚本所需要的最低CMake版本。这里指定了版本为3.10,表示该脚本需要在CMake 3.10及以上版本的环境中执行。

如果使用多个cmake_minimum_required指令,只有第一个指令会起作用,后续的指令将被忽略。因此,只需在CMake脚本中使用一次cmake_minimum_required指令来声明最低版本即可。如果在同一个CMake脚本中出现了多个cmake_minimum_required指令,CMake会给出错误提示并停止执行。

1
project(feature_phone LANGUAGES ASM C CXX)

project指令用于定义一个CMake项目。这里定义的项目名为”feature_phone”,并指定了使用汇编语言(ASM)以及C和C++语言来编写该项目的代码。

buildall.bat中有

1
m_tee gnumake -f Arbel.mak %MAKE_TV% 

而Arbel.mak中有

1
INC_MAK_PROJECT   = $(BUILD_ROOT)/tavor/Arbel/build/inc_project.mak

这个会包含宏定义。


makefile的学习

1
DS_FEAT_ENABLE :=$(DS_FEAT)

代码是将变量 DS_FEAT 的值赋给变量 DS_FEAT_ENABLE。具体来说,它使用了 := 操作符,表示使用的是覆盖(赋值)而不是追加的方式。

= 和 := 的区别是延迟展开和即时展开的区别。

= 叫做 赋值操作符:延迟展开(Simply Expanded Variables)
:= 叫做 赋值操作符:即时展开(Simple Variables)

使用 = 进行赋值时,变量的值是“延迟展开”的。这意味着,当变量被引用时,其值将在使用时展开而不是在赋值时。这可能导致一些意外的行为,尤其是在变量的值在后续规则中发生变化的情况下。

1
2
3
4
5
6
DS_FEAT = original_value
DS_FEAT_ENABLE = $(DS_FEAT)
DS_FEAT = new_value

all:
@echo $(DS_FEAT_ENABLE) # 输出 new_value 而不是 original_value
1
2
3
4
5
6
DS_FEAT = original_value
DS_FEAT_ENABLE := $(DS_FEAT)
DS_FEAT = new_value

all:
@echo $(DS_FEAT_ENABLE) # 输出 original_value
1
2
3
4
ifneq (,$(findstring PS_LW,${PMIC_RF_T}))
VARIANT_LIST += PS_LW
TARGET_DFLAGS += -DPLATFORM_FOR_PS_LW
endif

上面的代码用于根据条件向变量添加值。它根据是否能在 ${PMIC_RF_T} 中找到子字符串 PS_LW,来决定是否添加 PS_LW 到 VARIANT_LIST 变量,并向 TARGET_DFLAGS 变量添加宏定义 -DPLATFORM_FOR_PS_LW。

使用

编译器用的mingw64

执行下面命令:

1
2
1. cmake -G "MinGW Makefiles" ..
2. mingw32-make
  1. cmake -G "MinGW Makefiles" .. :该命令用于生成用于 MinGW 的 Makefile。这里的 -G "MinGW Makefiles" 指定了要使用的生成器为 MinGW Makefiles,而 .. 表示 CMake 将在当前目录的上一级目录中查找 CMakeLists.txt 文件。

  2. mingw32-make:该命令用于根据步骤 1 生成的 Makefile 来编译项目。它会根据 Makefile 中的规则和目标,执行相应的编译操作。

参考

https://github.com/seisman/how-to-write-makefile