cmake
1、从一个项目目录说起
.
├── bin
├── build
├── CMakeLists.txt
├── include
│ ├── testFunc1.h
│ └── testFunc.h
└── src
├── main.c
├── testFunc1.c
└── testFunc.c
我们不必关心目录中的文件的功能,我们只看看CMakeLists.txt中的内容.
cmake_minimum_required (VERSION 2.8) # 设置运行本项目所需要的cmake最小版本号
project (demo) # 设置项目名称
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) # 设置可执行文件的输出目录
aux_source_directory (src SRC_LIST) # 设置STC_LIST变量为src目录下所有文件
include_directories (include) #设置指定包含头文件的目录
add_executable (main ${SRC_LIST}) # 最终可执行文件的名字main.ext,依赖的所有文件
2、cmake其他命令
add_subdirectory (src)
,这个命令可以向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制的存放位置,具体用法可以百度。
这里指定src目录下存放了源文件,当执行cmake时,就会进入src目录下去找src目录下的CMakeLists.txt,所以在src目录下也建立一个CMakeLists.txt,内容如下,
add_library (testFunc_shared SHARED ${SRC_LIST})
生成动态库或静态库(第1个参数指定库的名字;第2个参数决定是动态还是静态,如果没有就默认静态;第3个参数指定生成库的源文件)
set (LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
指定库文件输出路径
option(MYDEBUG "enable debug compilation" OFF)
其第一个参数是这个option的名字,第二个参数是字符串,用来描述这个option是来干嘛的,第三个是option的值,ON或OFF,也可以不写,不写就是默认OFF。
add_compile_options(-std=c++11 -Wall)
添加编译选项
set(SRC main.c test.c xx.c xxx.c)
设置变量SRC为后面指定的文件
find_library(TESTFUNC_LIB testFunc HINTS ${PROJECT_SOURCE_DIR}/testFunc/lib)
在指定目录下查找指定库,并把库的绝对路径存放到变量里,其第一个参数是变量名称,第二个参数是库名称,第三个参数是HINTS,第4个参数是路径,其它用法可以参考cmake文档
target_link_libraries (main ${TESTFUNC_LIB})
把目标文件与库文件进行链接
3、实际项目的一个CMakeLists.txt

cmake_minimum_required (VERSION 3.0)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
add_compile_options(-std=c++11)
set(SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/src/XThreadPool.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/XThread.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/XServerTask.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/XComTask.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/XTools.cpp)
project (demo)
FIND_LIBRARY(Libevent libevent.dylib /opt/homebrew/Cellar/libevent/2.1.12/lib/)
add_library (xcom SHARED ${SRC_LIST})
target_link_libraries (xcom ${Libevent})
作者: mengchao
出处:https://www.cnblogs.com/meng-chao/p/16064442.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)