CMake入门经典总结

来源:互联网 发布:淘宝天猫国际有假货吗 编辑:程序博客网 时间:2024/06/05 04:29

 //工程名称
1 PROJECT(main)
//令限定了 CMake 的版本
2 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)


//aux_source_directory(<dir> <variable>) 
//该命令会把参数 <dir> 中所有的源文件名称赋值给参数 <variable>
3 AUX_SOURCE_DIRECTORY(. DIR_SRCS)




//指明本项目包含一个子目录 src
4 ADD_SUBDIRECTORY( src )


//指明可执行文件 main 需要连接一个名为Test的链接库

TARGET_LINK_LIBRARIES( main Test )


//exe 执行目录
7
 ADD_EXECUTABLE(main ${DIR_SRCS})


//使用命令 ADD_LIBRARY 将 src 目录中的源文件编译为共享库

ADD_LIBRARY ( Test ${DIR_TEST1_SRCS})
ADD_LIBRARY(hello STATIC ${SOURCE_1})           //#告诉CMake生成的是一个静态库





INCLUDE_DIRECTORIES(include) //head file path
INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include/")//告诉CMake头文件在哪里?


10 
FILE(GLOB SOURCE "./*.cpp")                      //#告诉CMake:工程的源文件在哪里?


 11 
SET(PROJECT_ROOT_PATH "${CMAKE_SOURCE_DIR}/../")             //    #工程的根目录
SET(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin/")      //     #可执行生成后存放的目录(CMAKE_SOURCE_DIR是cmake目录)
SET(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/lib/")        //      #静态库生成后存放的目录




12
 FIND_PATH 指明头文件查找的路径,原型如下: 
 FIND_PATH (<VAR> name1 [path1 path2 ...]) 该命令在参数 path* 指示的目录中查找文件 name1 并将查找到的路径保存在变量 VAR 中。
 FIND_LIBRARY 同 FIND_PATH 类似,用于查找链接库并将结果保存在变量中。
 FIND_PACKAGE //会到 指示的目录中查找文件 




13  
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") //调试版
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")  //发行版


14 
make clean //清理工程


//用$ENV{VAR}得到环境变量的引用


15
 Set(ENV{VAR} /home) //设置环境变量


//////////////////////////////
16 
if(var) 
   some_command(...) 
endif(var)


foreach(f ${VAR}) 
    message(${f}) 
endforeach(f)
////////////////////////////////


////////////////////////////////////////
17 
function(get_lib lib_FILE lib_NAME lib_PATH)


some_thing(...) 


endfunction(get_lib)
///////////////////////////////////////

 

 

比如  CHECK_SYMBOL_EXISTS(SHM_HUGETLB sys/shm.h  HAVE_DECL_SHM_HUGETLB)

该CMake文件的包含了 INCLUDE(CheckSymbolExists)

CheckSymbolExists 是CMake的公共模块,我的机器上位于/usr/share/cmake-2.8/Modules目录下。

我们继续研究该文件:

阅读了其源代码后,MACRO(CHECK_SYMBOL_EXISTS SYMBOL FILES VARIABLE)

这个宏的作用就是,查找相关文件(FILES)里面是否包含相关符号(SYMBOL) 如果存在则设置VARIABLE 为1,MESSAGE宏会在屏幕上做相关打印。

上面的列子中就是在 sys/shm.h 文件里面查找SHM_HUGETLB 符号。


//修改libhello 为hello
set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")


//控制 Debug 和 Release 模式的构建
SET(CMAKE_BUILD_TYPE Debug)




FIND_PACKAGE( name ):
在指定的模块目录中搜索一个名为Find<name>.cmake(例如,FindOSG.cmake)的CMake脚本模块文件,执


行其中的内容,以图搜索到指定的外部依赖库头文件和库文件位置。
INCLUDE( file ):
在当前文件中包含另一个CMake脚本文件的内容。


ADD_DEFINITIONS( -DMACRO1 –DMACRO2 … ):
添加-D预编译宏定义,可以一次添加多个。



CONFIGURE_FILE( infile outfile ):
将文件infile复制到outfile的位置,同时执行其中变量的自动配置和更替,即,将infile中所有形同
“${VAR}”和“@VAR@”的变量替换为对应的内容,并拷贝到outfile中,而这个新生成的outfile文件也
可以在之后的脚本代码中得以使用。