包含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