cmake_t1_基本例子

目录结构

|t1
  |-CMakeLists.txt
  |-main.c

main.c

//main.c
#include <stdio.h>

int main()
{
    printf("Hello World from t1 Main!\n");
    return 0;
}

CMakeLists.txt

PROJECT (HELLO)
#这个指令隐式的定义了两个 cmake 变量:
#<projectname>_BINARY_DIR 以及<projectname>_SOURCE_DIR,这里就是
#HELLO_BINARY_DIR 和 HELLO_SOURCE_DIR,
#因为采用的是内部编译,两个变量目前指的都是工程所
#在路径/path/to/t1,后面我们会讲到外部编译,两者所指代的内容会有所不同。
#同时 cmake 系统也帮助我们预定义了 PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR
#变量,他们的值分别跟 HELLO_BINARY_DIR 与 HELLO_SOURCE_DIR 一致。
#为了统一起见,建议以后直接使用 PROJECT_BINARY_DIR,PROJECT_SOURCE_DIR,即
#使修改了工程名称,也不会影响这两个变量。如果使用了
#<projectname>_SOURCE_DIR,修改工程名称后,需要同时修改这些变量


SET(SRC_LIST main.c)
#如果有多个源文件,也可以定义成:
#SET(SRC_LIST main.c t1.c t2.c)。
#SET(SRC_LIST main.c) 也可以写成 SET(SRC_LIST “main.c”)
#SET(SRC_LIST “fu nc.c”) 不能写成 SET(SRC_LIST fu nc.c)

MESSAGE(STATUS "This is HELLO_BINARY_DIR ${HELLO_BINARY_DIR}")
MESSAGE(STATUS "This is HELLO_SOURCE_DIR ${HELLO_SOURCE_DIR}")
MESSAGE(STATUS "This is PROJECT_SOURCE_DIR ${PROJECT_SOURCE_DIR}")
MESSAGE(STATUS "This is PROJECT_BINARY_DIR ${PROJECT_BINARY_DIR}")
#MESSAGE 指令的语法是:
#MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" ...)
#这个指令用于向终端输出用户定义的信息,包含了三种类型:
#SEND_ERROR,产生错误,生成过程被跳过。
#SATUS,输出前缀为—的信息。
#FATAL_ERROR,立即终止所有 cmake 过程

ADD_EXECUTABLE(hello ${SRC_LIST})
#等价写法
#ADD_EXECUTABLE(hello main.c func.c)
#ADD_EXECUTABLE(hello main.c;func.c)

#此外,你可以可以忽略掉 source 列表中的源文件后缀,比如可以写成
#ADD_EXECUTABLE(t1 main),cmake 会自动的在本目录查找 main.c 或者 main.cpp
#等,当然,最好不要偷这个懒,以免这个目录确实存在一个 main.c 一个 main.cpp

#${}来引用变量,这是 cmake 的变量应用方式,但是,有一些例外,比
#如在 IF 控制语句,变量是直接使用变量名引用,而不需要${}。如果使用了${}去应用变
#量,其实 IF 会去判断名为${}所代表的值的变量,那当然是不存在的了



#内部构建与外部构建
#我们刚才进行的是内部构建(in-source build),而 cmake 强烈推荐的是外部构建(out-of-source build)。
#1. 在 t1 目录中建立 build 目录
#2. 进入 build 目录,运行 cmake ..
#3. make
#out-of-source 外部编译,一个最大的好处是,对于原有的工程没
#有任何影响,所有动作全部发生在编译目录。通过这一点,也足以说服我们全部采用外部编译方式构建工程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cmake_minimum_required(VERSION 3.8.0 FATAL_ERROR) project(mcu_kit VERSION 0.1.0 DESCRIPTION "mcu-kit SDK" LANGUAGES C ) set(PROJECT_BRIEF "vDiscovery") set(CMAKE_C_STANDARD 11) set(CMAKE_C_EXTENSIONS ON) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_POSITION_INDEPENDENT_CODE ON) add_compile_options(-Wall) list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") include(CMakePrintHelpers) include(ConfigureChecks) if(EXISTS "${PROJECT_SOURCE_DIR}/config.cmake") include(config.cmake) else() message(FATAL_ERROR "Can't find cmake.config file") endif() if(${CMAKE_CROSSCOMPILING}) set(LV_SIMULATOR_ON_PC OFF) else() set(LV_SIMULATOR_ON_PC ON) endif() configure_file( "${PROJECT_SOURCE_DIR}/base/base_sdk_version.h.in" "${PROJECT_SOURCE_DIR}/base/base_sdk_version.h" ) configure_file( "${PROJECT_SOURCE_DIR}/base/base_config.h.in" "${PROJECT_SOURCE_DIR}/base/base_config.h" ) set(CMAKE_INSTALL_BINDIR ${CMAKE_INSTALL_PREFIX}/bin) set(CMAKE_INSTALL_SBINDIR ${CMAKE_INSTALL_PREFIX}/sbin) set(CMAKE_INSTALL_LIBDIR ${CMAKE_INSTALL_PREFIX}/lib) set(CMAKE_INSTALL_INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/include) set(CMAKE_INSTALL_SYSCONFDIR ${CMAKE_INSTALL_PREFIX}/etc) set(CMAKE_INSTALL_SHARESTATEDIR ${CMAKE_INSTALL_PREFIX}/com) set(CMAKE_INSTALL_LOCALSTATEDIR ${CMAKE_INSTALL_PREFIX}/var) set(CMAKE_INSTALL_INFODIR ${CMAKE_INSTALL_PREFIX}/info) set(CMAKE_INSTALL_LOCALEDIR ${CMAKE_INSTALL_PREFIX}/locate) set(CMAKE_INSTALL_MANDIR ${CMAKE_INSTALL_PREFIX}/man) set(CMAKE_INSTALL_DOCDIR ${CMAKE_INSTALL_PREFIX}/doc) set(CMAKE_INSTALL_RESDIR ${CMAKE_INSTALL_PREFIX}) include(PrepareInstall) set(KIT_ROOT_DIR ${CMAKE_SOURCE_DIR}) add_subdirectory("base") # add_subdirectory("third-party") add_subdirectory("lib") add_subdirectory("drivers") add_subdirectory("framework") add_subdirectory("sysapp") add_subdirectory("app") include(GeneratePkgConfig) include(Linux-kitInfo)详细注释一下这段代码
05-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值