0
点赞
收藏
分享

微信扫一扫

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官网​​


举报

相关推荐

[CMake教程] CMake列表 - list

CMake

cmake语言

CMake简介

Android CMake

CMake学习

cmake基础

0 条评论