最近工作需求,需要从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 files
INCLUDE_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生成的文件都会在本目录下,而不会污染工程源文件。