cmake小结:
CMakeLists.txt 文件中不区分大小写
PROJECT(project_name) 定义工程名称
语法:project(projectname [cxx] [c] [java])
可以指定工程采用的语言,选项分别表示:C++, C, java, 如不指定默认支持所有语言
MESSAGE(STATUS, “Content”) 打印相关消息输出消息,供调试CMakeLists.txt 文件使用。
SET(CMAKE_BUILE_TYPE DEBUG) 设置编译类型debug 或者release。 debug 版会生成相关调试信息,可以使用GDB 进行 调试;release不会生成调试信息。当无法进行调试时查看此处是否设置为debug.
SET(CMAKE_C_FLAGS_DEBUG “-g -Wall”) 设置编译器的类型
CMAKE_C_FLAGS_DEBUG ---- C 编译器 CMAKE_CXX_FLAGS_DEBUG ---- C++ 编译器
ADD_SUBDIRECTORY(utility) 添加要编译的子目录为工程主目录下的存放源代码的子目录使用该命令,各子目录出现的顺序随意。
SET(SOURCE_FILES …..)
表示要编译的源文件,所有的源文件都要罗列到此处。set 设置变量,变量名SOURCE_FILES自定义。
INCLUDE_DIRECTORY(…)
include头文件时搜索的所有目录
变量PROJECT_SOURCE_DIR 表示工程所在的路径,系统默认的变量
LINK_DIRECTORIES(…)
库文件存放的目录,在程序连接库文件的时候要再这些目录下寻找对应的库文件
ADD_LIBRARY(…)
表示生成静态链接库libassociaiton.a,由${PROJECT_SOURCE_DIR}代表的文件生成。
语法:ADD_LIBRARY(libname [SHARED|STATIC]
SHARED 表示生成动态库, STATIC表示生成静态库。
TARGET_LINK_LIBRARY(association core)
表示库association 依赖core库文件
SET_TARGET_PROPERTIES
设置编译的库文件存放的目录,还可用于其他属性的设置。如不指定,
生成的执行文件在当前编译目录下的各子目录下的build目录下,好拗口!简单一点:
如指定在: ./src/lib 下
不指定在: ./src/build/utility/build 目录下
生成的中间文件在./src/build/utilty/build 目录下,不受该命令额影响
ADD_EXECUTABLE() #指定要生成的执行文件的名称server
其他用法同utilty/CMakeLists.txt
SET_TARGET_PROPERTIES
设置生成的执行文件存放的路径,
注意:
执行文件server 依赖的子目录utility 子目录生成的静态库libutility.a,在指定的时候要写成:
TARGET_LINK_LIBRARIES(server utility)而不能写成:
TARGET_LINK_LIBRARIES(server libutility.a)
否则编译总会提示找不到libutility库文件。
但使用第三方的库却要指定成具体的库名,如:libACE-6.0.0.so
这一点很诡异,暂时还没找到原因。
CMake更多详细用法可参考 《cmake实践》