综述
CMake是“Cross platform make”的缩写,但严格的将CMake并不是编译软件,而是一种编译的应用化,最终调用编译器的还是g++、gcc等编译器;
理解了这一点,完成CMake交叉编译的改造就很简单了
为什么要用cmake,原因很简单,Makefile语法比较繁杂,用cmake可以很方便的实现项目工程管理,会自动帮我们生成makefile文件
逻辑图
实践
交叉编译工具链
我的环境编译工具链所在位置:/home/user/crosstool/crosstool-ng/build/arm/toolschain/bin
UBUNTU上安装cmake
sudo apt install apt cmake
准备代码文件
确认代码在x86下编译通过
修改CMakeLists.txt
修改为arm架构工具链:
set(CMAKE_C_COMPILER /home/user/crosstool/crosstool-ng/build/arm/toolschain/bin/arm-unknown-linux-gnueabi-gcc)
set(CMAKE_CXX_COMPILER /home/user/crosstool/crosstool-ng/build/arm/toolschain/bin/arm-unknown-linux-gnueabi-g++)
cmake_minimum_required(VERSION 3.5.1)
project(libjson)
set(CMAKE_C_COMPILER /home/user/crosstool/crosstool-ng/build/arm/toolschain/bin/arm-unknown-linux-gnueabi-gcc)
set(CMAKE_CXX_COMPILER /home/user/crosstool/crosstool-ng/build/arm/toolschain/bin/arm-unknown-linux-gnueabi-g++)
#set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
#set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
#set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
#set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
#set(CMAKE_CXX_FLAG "--std=c++11")
set(CMAKE_SYSTEM_NAME linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
#启用对汇编的支持
ENABLE_LANGUAGE(ASM)
SET(STARTUP_SRC ${PROJECT_SOURCE_DIR}/Startup/startup_ht32f5xxxx_gcc_01.s)
SET(CMAKE_ASM_FLAGS "${MCU_FLAGS} --defsym USE_HT32_CHIP=4")
#添加源文件
AUX_SOURCE_DIRECTORY(. MAIN_SRCS)
#告诉编译器带上调试符号
SET(CMAKE_CXX_FLAGS "-g --std=c++2a")
SET(LIBHELLO_SRC libjson.cpp)
ADD_LIBRARY(json SHARED ${LIBHELLO_SRC})
CMake交叉编译
我公司承接各类技术服务,主要聚焦于:stm32、单片机、嵌入式、QT应用开发、Web+Python+Django应用开发。欢迎合作。