cmake

包含CMakeLists.txt源码的使用

当从网上或者其他地方获取源码后,在目录里面会有CMakeLists.txt和其他一些.c .h文件
基本操作流程为:
ccmake directory 用于配置编译选项,一般这一步不需要配置,直接执行第二步
cmake directory 用于根据CMakeLists.txt生成Makefile文件
make


cmake内部变量

CMAKE_C_COMPILE     指定c编译器
CMAKE_CXX_COMPILER
CMAKE_C_FLAGS       编译c文件时的选项,如-g,也可以通过add_definitions添加编译选项
EXECUTABLE_OUTPUT_PATH  可执行文件的存放路径
LIBRARY_OUTPUT_PATH 库文件路径
CMAKE_BUILD_TYPE    build类型(Debug, Release...),如CMAKE_BUILD_TYPE=Debug
BUILD_SHARED_LIBS   switch between shared and statis libraries

内部变量可以
在CMakeList.txt中指定,使用set
在cmake命令中使用,如cmake -DBUILD_SHARED_LIBS=OFF

另外自定义变量
cmake -DDEBUG_mode=ON
就可以在CMakeList.txt中判断这个变量
if(DEBUG_mode)
add_definitions(-DDEBUG)
endif()


cmake命令

project(HELLO)      指定项目名称
add_subdirectory    包含子目录
include_directories 指定头文件的搜索路径,相当于指定gcc的-I参数
link_directories    动态链接库或者静态链接库的搜索路径,相当于gcc的-L参数
target_link_libraries   添加链接库,相当于指定-l参数

add_library
    add_library(hello, hello.c) 将hello.c编译成静态库如libhello.a
add_executable      编译可执行程序
    add_executable(helloDemo demo_a.c demo_b.c) 将demo_a.c demo_b.c编译成helloDemo
add_definitions     添加编译参数
    add_definitions(-DDEBUG)将在gcc命令行添加DEBUG宏定义
    add_definitions( “-Wall -ansi –pedantic –g”)

message([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" ...)

cmake中使用宏

cmake中使用宏的几种方法:
1) set(CMAKE_C_FLAGS “”)
2) add_definitions()
3) 通过cmake command传递

这里我采用在cmake command中传递变量:
cmake -DFT2_TEST_LOOP=$(CONFIG_ft2_test_loop)
(这个CONFIG_ft2_test_loop配置选项是由Kbuild生成),FT2_TEST_LOOP又不能直接在c代码中当作宏来使用,只能在CMakelist.txt中根据FT2_TEST_LOOP这个变量(其实是一个变量)来重新生成一个宏定义
if(FT2_TEST_LOOP)
set(CMAKE_C_FLAGS “${CMAKE_C_FLAGS} -DFT2_TEST_LOOP”)
endif(FT2_TEST_LOOP)
这里的FT2_TEST_LOOP就能在c代码中使用了。

另外KBuild系统生成的.config文件中显示”CONFIG_ft2_test_loop is not set”的意思是CONFIG_ft2_test_loop已经定义,但是值为0


参考文章

  1. CMake的使用
  2. CMAKE官网
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luckywang1103

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值