示例项目目录结构
示例项目中,主程序位于src目录下的源文件main.c,dir1被编译成动态库,dir2被编译成静态库,src目录下的cmake文件将二者链接到main.c并生成可执行文件。最终可执行文件和库均输出到release目录下,并且支持选择输出Release版本和Debug版本。
CMakeLists.txt编写
1 项目顶层
顶层项目的cmake文件最为简单,就是设定项目名并通过add_subdirectory调用来执行src目录下编译源文件的cmake。此外还可以在此指定一些帮助文档等等的按照路径
cmake_minimum_required(VERSION 2.8)
project(learnCmake)
add_subdirectory(./src)
目标文件编译
src目录下的cmake文件需要做几件事:
- 判断输出Release版本还是Debug版本,并设置对应的编译选项;
- 设置可执行文件的最终输出路径(根据是Release版本还是Debug版本分开);
- 指定包含的头文件和链接的库文件所在目录;
- 执行源文件子目录下的其他cmake文件;
- 指定输出目标文件(带上除了库之外需要一起编译的源文件),以及链接的库名称;
- 指定目标文件安装位置
cmake_minimum_required(VERSION 2.8)
# 根据输入参数判断需要编译的版本同时设置对应的编译选项
if(${
CMAKE_BUILD_TYPE} MATCHES "Release")
message(STATUS "Release版本")
set(BuildType "Release")
set(CMAKE_C_FLAGS "$ENV{CFLAGS} -DNODEBUG -O3 -Wall")
set(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -DNODEBUG -O3 -Wall")
else()
message(STATUS