CMake使用例子

目录结构
.
├── armgcc.cmake
├── build
│ ├── build_all_debug.sh
│ ├── build_all_release.sh
│ ├── clear.sh
│ └── readme.txt
└── CMakeLists.txt

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

#ADD_DEFINITIONS(-DPLATFORM_FREERTOS)
ADD_DEFINITIONS(-DCONFIG_PLATFORM_8711B)

set(MY_TARGET msmart)
set(EXTRA_LIBS _platform airkiss)

#The directory of header file
INCLUDE_DIRECTORIES(
"${PROJECT_SOURCE_DIR}/../inc"
"${PROJECT_SOURCE_DIR}/../midea/air/smart_inc/"

"${PROJECT_SOURCE_DIR}/../../../component/os/freertos"
"${PROJECT_SOURCE_DIR}/../../../component/os/freertos/freertos_v8.1.2/Source/include"
"${PROJECT_SOURCE_DIR}/../../../component/os/freertos/freertos_v8.1.2/Source/portable/GCC/ARM_CM4F"
"${PROJECT_SOURCE_DIR}/../../../component/os/os_dep/include"
"${PROJECT_SOURCE_DIR}/../../../component/common/api"
"${PROJECT_SOURCE_DIR}/../../../component/common/api/wifi"

"${PROJECT_SOURCE_DIR}/../../../component/common/drivers/wlan/realtek/include"
"${PROJECT_SOURCE_DIR}/../../../component/common/drivers/wlan/realtek/src/osdep"

"${PROJECT_SOURCE_DIR}/../../../component/common/network/dhcp"
"${PROJECT_SOURCE_DIR}/../../../component/common/network/httpc"
"${PROJECT_SOURCE_DIR}/../../../component/common/network/lwip/lwip_v1.4.1/src/include"
"${PROJECT_SOURCE_DIR}/../../../component/common/network/lwip/lwip_v1.4.1/src/include/ipv4"
"${PROJECT_SOURCE_DIR}/../../../component/common/network/lwip/lwip_v1.4.1/port/realtek"
"${PROJECT_SOURCE_DIR}/../../../component/common/network/lwip/lwip_v1.4.1/port/realtek/freertos"
"${PROJECT_SOURCE_DIR}/../../../component/common/network/lwip/lwip_v1.4.1/src/include/lwip"

"${PROJECT_SOURCE_DIR}/../../../component/soc/realtek/8711b/cmsis"
"${PROJECT_SOURCE_DIR}/../../../component/soc/realtek/8711b/cmsis/device"
"${PROJECT_SOURCE_DIR}/../../../component/soc/realtek/8711b/fwlib/include"
"${PROJECT_SOURCE_DIR}/../../../component/soc/realtek/8711b/misc"
"${PROJECT_SOURCE_DIR}/../../../component/soc/realtek/8711b/swlib/rtl_lib"
"${PROJECT_SOURCE_DIR}/../../../component/soc/realtek/8711b/swlib/std_lib/include"
"${PROJECT_SOURCE_DIR}/../../../component/soc/realtek/8711b/swlib/std_lib/libc/rom/string"
"${PROJECT_SOURCE_DIR}/../../../component/soc/realtek/8711b/swlib/std_lib/libgloss/rtl8195a/rom"
"${PROJECT_SOURCE_DIR}/../../../component/soc/realtek/8711b/app/monitor/include"

"${PROJECT_SOURCE_DIR}/../../../component/common/mbed/hal"
"${PROJECT_SOURCE_DIR}/../../../component/common/mbed/hal_ext"
"${PROJECT_SOURCE_DIR}/../../../component/common/mbed/targets/hal/rtl8711b"
)

SET(APP_FLAGS "-include ${PROJECT_SOURCE_DIR}/../midea/air/smart_inc/app/config.h")

SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${APP_FLAGS}")
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${APP_FLAGS}")

IF(CMAKE_BUILD_TYPE MATCHES Release)
	message(STATUS "C_RELEASE_FLAGS="${CMAKE_C_FLAGS_RELEASE})
ELSEIF(CMAKE_BUILD_TYPE MATCHES Debug)
	message(STATUS "C_DEBUG_FLAGS="${CMAKE_C_FLAGS_DEBUG})
ENDIF()

#The directory of searching library
LINK_DIRECTORIES(
"${PROJECT_SOURCE_DIR}/air/smart_src/sal/airkiss/lib/"
"${PROJECT_SOURCE_DIR}/../../../component/soc/realtek/8711b/misc/bsp/lib/common/GCC/"
)

#recursively add *.c file
FILE(GLOB_RECURSE MSMART_SRC "${CMAKE_CURRENT_SOURCE_DIR}/../midea/air/smart_src/*.c")

#compile source into the static library
ADD_LIBRARY(${MY_TARGET} STATIC ${MSMART_SRC})
TARGET_LINK_LIBRARIES(${MY_TARGET} ${EXTRA_LIBS})

armgcc.cmake

INCLUDE(CMakeForceCompiler)

# TOOLCHAIN EXTENSION
IF(WIN32)
    SET(TOOLCHAIN_EXT ".exe")
ELSE()
    SET(TOOLCHAIN_EXT "")
ENDIF()

# EXECUTABLE EXTENSION
SET (CMAKE_EXECUTABLE_SUFFIX ".elf")

# CMAKE_BUILD_TYPE
IF(NOT CMAKE_BUILD_TYPE MATCHES Debug)
    SET (CMAKE_BUILD_TYPE Release CACHE INTERNAL "build type")
ENDIF()

# TOOLCHAIN_DIR AND NANO LIBRARY
SET(TOOLCHAIN_DIR $ENV{ARMGCC_DIR})
STRING(REGEX REPLACE "\\\\" "/" TOOLCHAIN_DIR "${TOOLCHAIN_DIR}")

IF(NOT TOOLCHAIN_DIR)
    MESSAGE(FATAL_ERROR "***Please set ARMGCC_DIR in envionment variables***")
ENDIF()

MESSAGE(STATUS "TOOLCHAIN_DIR: " ${TOOLCHAIN_DIR})

# TARGET_TRIPLET
SET(TARGET_TRIPLET "arm-none-eabi")

SET(TOOLCHAIN_BIN_DIR ${TOOLCHAIN_DIR}/bin)
SET(TOOLCHAIN_INC_DIR ${TOOLCHAIN_DIR}/${TARGET_TRIPLET}/include)
SET(TOOLCHAIN_LIB_DIR ${TOOLCHAIN_DIR}/${TARGET_TRIPLET}/lib)

SET(CMAKE_SYSTEM_NAME Generic)
SET(CMAKE_SYSTEM_PROCESSOR arm)

CMAKE_FORCE_C_COMPILER(${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-gcc${TOOLCHAIN_EXT} GNU)
CMAKE_FORCE_CXX_COMPILER(${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-g++${TOOLCHAIN_EXT} GNU)
SET(CMAKE_ASM_COMPILER ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-gcc${TOOLCHAIN_EXT})

SET(CMAKE_OBJCOPY ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-objcopy CACHE INTERNAL "objcopy tool")
SET(CMAKE_OBJDUMP ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-objdump CACHE INTERNAL "objdump tool")

SET(COMMON_FLAGS "-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -w -Wno-pointer-sign \
-fno-common -fmessage-length=0  -ffunction-sections -fdata-sections -fomit-frame-pointer \
-fno-short-enums -DF_CPU=166000000L -std=gnu99 -fsigned-char")

SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -g2 ${COMMON_FLAGS}" CACHE INTERNAL "c compiler flags debug")
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g2 ${COMMON_FLAGS}" CACHE INTERNAL "cxx compiler flags debug")
SET(CMAKE_ASM_FLAGS_DEBUG "${CMAKE_ASM_FLAGS_DEBUG} -g" CACHE INTERNAL "asm compiler flags debug")
SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}" CACHE INTERNAL "linker flags debug")

SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Os ${COMMON_FLAGS}" CACHE INTERNAL "c compiler flags release")
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os ${COMMON_FLAGS}" CACHE INTERNAL "cxx compiler flags release")
SET(CMAKE_ASM_FLAGS_RELEASE "${CMAKE_ASM_FLAGS_RELEASE}" CACHE INTERNAL "asm compiler flags release")
SET(CMAKE_EXE_LINKER_FLAGS_RELESE "${CMAKE_EXE_LINKER_FLAGS_RELESE}" CACHE INTERNAL "linker flags release")

SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_DIR}/${TARGET_TRIPLET} ${EXTRA_FIND_PATH})
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

IF(CMAKE_BUILD_TYPE MATCHES Release)
    SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/release)
    SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/release)
ELSEIF(CMAKE_BUILD_TYPE MATCHES Debug)
    SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/debug)
    SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/debug)
ENDIF()

MESSAGE(STATUS "BUILD_TYPE: " ${CMAKE_BUILD_TYPE})

build_all_debug.sh

if [ ! -d ../../../../tools/arm-none-eabi-gcc/4_8-2014q3 ] ; then
	tar -jxf ../../../../tools/arm-none-eabi-gcc/gcc-arm-none-eabi-4_8-2014q3-20140805-linux.tar.bz2 -C ../../../../tools/arm-none-eabi-gcc/ ;
        mv ../../../../tools/arm-none-eabi-gcc/gcc-arm-none-eabi-4_8-2014q3 ../../../../tools/arm-none-eabi-gcc/4_8-2014q3 ;
fi
CURRENT_DIR=$(pwd)
export ARMGCC_DIR=${CURRENT_DIR}/../../../../tools/arm-none-eabi-gcc/4_8-2014q3

#-DCMAKE_TOOLCHAIN_FILE=./toolChain.cmake
#cmake .. -DCMAKE_SYSTEM_NAME="Generic" -DCMAKE_C_COMPILER="arm-none-eabi-gcc"

#rm -rf CMake*
#rm -rf !(build.sh|build_all.sh)
rm -rf *ake* debug
#read -p "Press any key to continue." var

#cmake .. -DCMAKE_TOOLCHAIN_FILE=../toolChain.cmake
cmake .. -DCMAKE_TOOLCHAIN_FILE=../armgcc.cmake -DCMAKE_BUILD_TYPE=Debug
make
echo "copy libmsmart.a to ${PWD}/../../midea/air/smart_inc"
cp ./debug/libmsmart.a ../../midea/air/smart_inc/

build_all_release.sh

if [ ! -d ../../../../tools/arm-none-eabi-gcc/4_8-2014q3 ] ; then
	tar -jxf ../../../../tools/arm-none-eabi-gcc/gcc-arm-none-eabi-4_8-2014q3-20140805-linux.tar.bz2 -C ../../../../tools/arm-none-eabi-gcc/ ;
        mv ../../../../tools/arm-none-eabi-gcc/gcc-arm-none-eabi-4_8-2014q3 ../../../../tools/arm-none-eabi-gcc/4_8-2014q3 ;
fi
CURRENT_DIR=$(pwd)
export ARMGCC_DIR=${CURRENT_DIR}/../../../../tools/arm-none-eabi-gcc/4_8-2014q3

#-DCMAKE_TOOLCHAIN_FILE=./toolChain.cmake
#cmake .. -DCMAKE_SYSTEM_NAME="Generic" -DCMAKE_C_COMPILER="arm-none-eabi-gcc"

#rm -rf CMake*
#rm -rf !(build.sh|build_all.sh)
rm -rf *ake* release
#read -p "Press any key to continue." var

#cmake .. -DCMAKE_TOOLCHAIN_FILE=../toolChain.cmake
cmake .. -DCMAKE_TOOLCHAIN_FILE=../armgcc.cmake
make
echo "copy libmsmart.a to ${PWD}/../../midea/air/smart_inc"
cp ./release/libmsmart.a ../../midea/air/smart_inc/

clear.sh

rm -rf *ake* release debug

readme.txt

1. used to compile a debug version library.
build_all_debug.sh
perform command "./build_all_debug.sh" in the "build" directory
 
2. used to compile a release version library.
build_all_release.sh
perform command "./build_all_release.sh" in the "build" directory

3. clear up temporary file.
clear.sh
perform command "./clear.sh" in the "build" directory
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值