CMake实践

来源:互联网 发布:澳洲工资算法 编辑:程序博客网 时间:2024/06/05 21:10

最近工作需求,需要从win平台移植到linux平台。上面建议用CMake,学习了一下,下面通过一个实例来说明、回顾一下CMake的使用。

 

cmake_minimum_required(VERSION 2.8)PROJECT(firest_test)ADD_DEFINITIONS(-D_CONSOLE)ADD_DEFINITIONS(-DWIN32)ADD_DEFINITIONS(-D_DEBUG)AUX_SOURCE_DIRECTORY(firest_test DIR_SRC_MAIN)# show files in subdir#FOREACH(file ${firest_test})#MESSAGE(STATUS ${file})#ENDFOREACH(file)# include filesINCLUDE_DIRECTORIES(E:\boost\include)# library files#TARGET_LINK_LIBRARIES(firest_test libboost)AUX_SOURCE_DIRECTORY(testcase DIR_TEST_CASE)SET(TOTAL_SRCS ${DIR_SRC_MAIN} ${DIR_TEST_CASE})ADD_EXECUTABLE(firest_test ${TOTAL_SRCS})


cmake_minimum_required 这个是说明该CMakeLists.txt执行的CMake版本需求,不写会有警告。

 

PROJECT(projectname) projectname 工程名,网上很多实例都是大写,根据实际情况,其就是执行CMake后生成的sln文件名

 

ADD_DEFINITIONS 向编译器定义宏或者参数。如ADD_DEFINITIONS(-Wall)

 

AUX_SOURCE_DIRECTORY(dir var) 发现dir目录下的所有源文件,并存储在var中

 

INCLUDE_DIRECTORIES(include_dir) 包含目录的路径,如果你工程引用到其他库,

TARGET_LINK_LIBRARIES(target,lib_file) 目标文件链接时需要的库文件。


SET(var value1 value2 ...) 设置变量,可以一次设置多个值,值之间用空格或分号隔开


ADD_EXECUTABLE(target filelist) 设置目标生成文件,filelist为依赖的源文件列表


最后关于CMake的运行问题。有In-Source和Out-of-Source两种类型。


In-Source 就是在工程目录下,运行CMake . (即在当前目录下运行,一般是工程目录下) 但是这种方式,有一个很大的弊病就是CMake生成的文件会污染我们自己的工程文件,如果你的源文件都没有CMake生成的多,就知道效果了。


Out-Of-Source这种是比较推荐的。就是在其他我们需要生成的目录下,运行CMake CMakeLists.txt所在的文件路径即可,所有CMake生成的文件都会在本目录下,而不会污染工程源文件。

0 0