通过一个例子,熟悉常用的cmake命令,这个例子包括:
- 具有多个、多层的目录结构
- 编译静态库并链接
目录树如下:

helplib提供一个函数,函数返回协助信息;printlib提供一个函数,负责打印信息到终端。
tool_help.cpp调用helplib中的函数;tool_print.cpp调用printlib中的函数。
在主目录生成CMakeLists.txt文件,内容如下:
# cmake版本要求
cmake_minimum_required(VERSION 2.8...3.24)
# 项目名称
project(CmakeSample)
# 版本变量
set(VERSION_MAJOR 1)
set(VERSION_MINOR 2)
# 生成配置文件
configure_file(
"${PROJECT_SOURCE_DIR}/config.h.in"
"${PROJECT_BINARY_DIR}/config.h"
)
include_directories("${PROJECT_BINARY_DIR}")
# 添加helplib子目录
add_subdirectory("${PROJECT_SOURCE_DIR}/helplib")
include_directories("${PROJECT_SOURCE_DIR}/helplib")
# 添加printlib子目录
add_subdirectory("${PROJECT_SOURCE_DIR}/printlib")
include_directories("${PROJECT_SOURCE_DIR}/printlib")
# 定义静态库列表变量
set(EXTRA_LIBS ${EXTRA_LIBS} helplib)
set(EXTRA_LIBS ${EXTRA_LIBS} printlib)
# 获取当前目录源文件列表
aux_source_directory(. DIR_SRCS)
# 添加目标文件
add_executable(CmakeSample ${DIR_SRCS})
# 链接静态库
target_link_libraries(CmakeSample ${EXTRA_LIBS})
我们将程序版本号写到配置文件中,方便修改,在主目录下编写config.h.in文件,内容如下
#define PROJECT_VERSION_MAJOR @VERSION_MAJOR@
#define PROJECT_VERSION_MINOR @VERSION_MINOR@
helplib目录下的CMakeLists.txt文件,内容如下:
aux_source_directory(. DIR_SRCS)
add_library(helplib ${DIR_SRCS})
printlib目录下的CMakeLists.txt文件,内容如下:
aux_source_directory(. DIR_SRCS)
add_library(printlib ${DIR_SRCS})
新的目录结构如下:

我们在主目录下新建build目录,并进入build目录执行cmake ..

构建成功后,编译并执行程序

© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END















- 最新
- 最热
只看作者