CMakeLists.txt
cmake_minimum_required (VERSION 2.8)
cmake最低版本为2.8
project (Demo1)
项目的名称是Demo1
add_executable(Demo main.cc)
将main.cc的文件编译名成Demo的可执行文件
aux_source_directory(. DIR_SRCS)
将当前目录下的可执行文件放入变量DIR_SRCS中
add_executable(Demo ${DIR_SRCS})
将DIR_SRCS中的文件编译名为Demo的可执行文件
add_subdirectory(math)
指明本项目包含一个子目录 math,这样 math 目录下的 CMakeLists.txt 文件和源代码也会被处理
target_link_libraries(Demo MathFunctions)
指明可执行文件 main 需要连接一个名为 MathFunctions 的链接库
add_library (MathFunctions ${DIR_LIB_SRCS})
将DIR_LIB_SRCS中的文件编译成静态文件
include_directories ("${PROJECT_SOURCE_DIR}/math")
添加头文件的搜索路径,相当于指定gcc的-I参数
add_custom_command(
TARGET armc-010 POST_BUILD
COMMAND ${CMAKE_OBJCOPY} ./armc-010${CMAKE_EXECUTABLE_SUFFIX} -O binary ./kernel.img
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMENT "Convert the ELF output file to a binary image" )
为一个目标(比如一个库文件或者可执行文件)加一条自定义命令。这种格式可以用于目标构建前或构建后的一些操作。这条命令会成为目标的一部分,并且只有目标被构建时才会执行。如果目标已经构建了,该目标将不会执行。如果指定了WORKING_DIRECTORY选项,这条命令会在给定的路径下执行。
内部变量
CMAKE_C_FLAGS: 编译C文件时的选项,如-g;也可以通过add_definitions添加编译选项
PROJECT_SOURCE_DIR: 项目顶层CMakeLists.txt所在路径, 也叫做CMAKE_SOURCE_DIR
PROJECT_BINARY_DIR: 执行cmake命令所在的路径,也叫做CMAKE_BINARY_DIR
DCMAKE_TOOLCHAIN_FILE
- CMAKE_SYSTEM_NAME: 即你目标机target所在的操作系统名称,比如ARM或者Linux你就需要写"Linux",如果Windows平台你就写"Windows",如果你的嵌入式平台没有相关OS你即需要写成"Generic",只有当CMAKE_SYSTEM_NAME这个变量被设置了,CMake才认为此时正在交叉编译,它会额外设置一个变量CMAKE_CROSSCOMPILING为TRUE。
- CMAKE_SYSTEM_PROCESSOR: 系统的CPU型号, CMake doesn't use this setting on a system it doesn't know.
- CMAKE_C_COMPILER: 顾名思义,即C语言编译器,这里可以将变量设置成完整路径或者文件名,设置成完整路径有一个好处就是CMake会去这个路径下去寻找编译相关的其他工具比如linker,binutils等,如果你写的文件名带有arm-elf等等前缀,CMake会识别到并且去寻找相关的交叉编译器。
eg:
网友评论