1.简介
cmake 允许开发者编写一种与平台无关的CmakeList.txt文件,来定制整个编译流程。cmake能更好的进行跨平台的编译。
2. cmake用法
- AUX_SOURCE_DIRECTORY(< dir > < variable >):
AUX_SOURCE_DIRECTORY ( . DIR_SRCS)
:将当前目录中的源文件名称赋值给变量 DIR_SRCS - ADD_SUBDIRECTORY(src): 指明本项目包含一个子目录 src
- SET(SOURCES src/Hello.cpp src/main.cpp):创建一个变量,名字叫SOURCE。它包含了这些cpp文件。
- ADD_EXECUTABLE(main ${SOURCES }):指示变量 SOURCES 中的源文件需要编译 成一个名称为 main 的可执行文件。 ADD_EXECUTABLE() 函数的第一个参数是可执行文件名,第二个参数是要编译的源文件列表。因为这里定义了SOURCE变量,所以就不需要罗列cpp文件了。等价于命令:
ADD_EXECUTABLE(main src/Hello.cpp src/main.cpp)
- ADD_LIBRARY(hello_library STATIC src/Hello.cpp):用于从某些源文件创建一个库,默认生成在构建文件夹。在add_library调用中包含了源文件,用于创建名称为libhello_library.a的静态库。
- TARGET_LINK_LIBRARIES( main Test ):指明可执行文件 main 需要连接一个名为Test的链接库。添加链接库。
- TARGET_INCLUDE_DIRECTORIES(hello_library PUBLIC ${PROJECT_SOURCE_DIR}/include):添加了一个目录,这个目录是库所包含的头文件的目录,并设置库属性为PUBLIC。
- MESSAGE(STATUS “Using bundled Findlibdb.cmake…”):命令 MESSAGE 会将参数的内容输出到终端。
- FIND_PATH () :指明头文件查找的路径,原型如下:
find_path(< VAR > name1 [path1 path2 ...])
该命令在参数 path* 指示的目录中查找文件 name1 并将查找到的路径保存在变量 VAR 中。 - FIND_LIBRARY(): 同 FIND_PATH 类似,用于查找链接库并将结果保存在变量中
编译项目类型
1.同一目录,多个源文件
./pro003
|
+--- main.cpp
|
+---test.cpp
|
+--- test.h
cmakelist .txt
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (pro003)
# 指定生成目标
add_executable(Demo main.cpp test.cpp)
在 add_executable 命令中增加了一个 test.cpp 源文件.
若是源文件比较多,则使用aux_source_directory 将当前目录中的源文件名称赋值给变量 DIR_SRCS,如
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (pro003)
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 指定生成目标
add_executable(Demo ${DIR_SRCS})
多目录,多个源文件
./pro004
|
+--- main.cpp
|
+--- tools/
|
+---- tools.cpp
|
+----tools.h
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (pro004)
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 添加 tools子目录
add_subdirectory(tools)
# 指定生成目标
add_executable(pro004 main.cpp)
# 添加链接库
target_link_libraries(pro004 tools)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)