因为嵌入式开发,我接触的都是交叉编译。即编译好的可执行程序并不是在本机运行,而是在目标机上跑。因此,我在使用cmake的时候,也需要交叉编译。
更多信息请参看:cmake官网
CMake给交叉编译预留了一个很好的变量即CMAKE_TOOLCHAIN_FILE,它定义了一个文件的路径,这个文件即toolChain,里面set了一系列你需要改变的变量和属性,包括C_COMPILER,CXX_COMPILER。CMake为了不让用户每次交叉编译都要重新输入这些命令,因此它带来toolChain机制,简而言之就是一个cmake脚本,内嵌了你需要改变以及需要set的所有交叉环境的设置。
这里面也牵扯了一些相关的变量设置,在这里我通过自己的项目,简单介绍下几个比较重要的:
set(CMAKE_ASM_COMPILER ccmips)
set(CMAKE_SYSTEM_NAME Generic)
set(UNIX True CACHE BOOL "Archiver")
set(CMAKE_C_COMPILER ccmips)
set(CMAKE_CXX_COMPILER c++mips)
set(CMAKE_AR armips CACHE FILEPATH "Archiver")
set(CMAKE_RANLIB ranlibmips CACHE FILEPATH "Archiver")
set(CMAKE_LINKER ldmips CACHE FILEPATH "Archiver")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_MODE_LIBRAR