此处以编译px4fmu-v4_default为例,编译环境为windows,eclipse编译。
-
px4fmu-v4_default:
-
$(call cmake-build,nuttx_px4fmu-v4_default)
这里会call cmake
-build这个函数,并且将参数nuttx_px4fmu
-v4_default传给该函数。
下面来看cmake
-build函数的定义:
函数的
-
# Functions
-
# --------------------------------------------------------------------
-
# describe how to build a cmake config
-
define cmake-build
-
+@if [ $(PX4_CMAKE_GENERATOR) = "Ninja" ] && [ -e $(PWD)/build_$@/Makefile ]; then rm -rf $(PWD)/build_$@; fi
-
+@if [ ! -e $(PWD)/build_$@/CMakeCache.txt ]; then git submodule update --init --recursive --force && mkdir -p $(PWD)/build_$@ && cd $(PWD)/build_$@ && cmake .. -G$(PX4_CMAKE_GENERATOR) -DCONFIG=$(1); fi
-
+$(PX4_MAKE) -C $(PWD)/build_$@ $(PX4_MAKE_ARGS) $(ARGS)
-
endef
首先,下面两个变量是这样定义的:
PX4_MAKE = make
PX4_MAKE_ARGS = -j$(j) --no-print-directory
-
+@if [ ! -e $(PWD)/build_$@/CMakeCache.txt ];......
这一行是来从网络上更新固件源码,可以不用更新,否则离线情况下可能会无法编译,所以,如果离线编译可以这样修改这一行:
-
#+@if [ ! -e $(PWD)/build_$@/CMakeCache.txt ]; then git submodule update --init --recursive --force fi
-
+@mkdir -p $(PWD)/build_$@ && cd $(PWD)/build_$@ && cmake .. -G$(PX4_CMAKE_GENERATOR) -DCONFIG=$(1)
我们将其中两行的命令解析后如下:
-
+@echo "****CERIK....mkdir -p $(PWD)/build_$@ && cd $(PWD)/build_$@ && cmake .. -G$(PX4_CMAKE_GENERATOR) -DCONFIG=$(1)"
-
+@echo "****CERIK....(PX4_MAKE) -C $(PWD)/build_$@ $(PX4_MAKE_ARGS) $(ARGS)"
解析后的结果如下:
-
****CERIK....mkdir -p /D/PX4/Firmware/build_px4fmu-v4_default && cd /D/PX4/Firmware/build_px4fmu-v4_default && cmake .. -GMSYS Makefiles -DCONFIG=nuttx_px4fmu-v4_default
-
****CERIK....make -C /D/PX4/Firmware/build_px4fmu-v4_default -j4 --no-print-directory
所以,最终执行的命令如下:
cmake
.. -GMSYS Makefiles -DCONFIG=nuttx_px4fmu-v4_default
make
-C /D/PX4/Firmware/build_px4fmu
-v4_default
-j4
--no
-print
-directory
阅读(2303) | 评论(0) | 转发(0) |