做了什么
- 构建一个学习项目(比如: <unix 高级编程> <unix 网络编程>,都能使用例中的方法,减少增加代码后的重新编译库文件)
- 遇见问题总结
- 区分系统,使用不同库
首先看下项目结构
cmake_project/
├── build
├── CMakeLists.txt
├── include
├── lib
└── src
├── CMakeLists.txt
├── lib
│ ├── CMakeLists.txt
│ ├── hello.c
│ └── hello.h
└── test
├── CMakeLists.txt
└── main.c
- 项目中的一级目录和文件有5个,4个目录、1个文件。build 最后用于编译的文件,cmake编译时会有副产物,不想副产物和代码混一起就老实加个build。include 是后面放头文件的位置。lib是后面放库文件的位置。src是源代码存放位置。CMakeLists.txt是cmake运行规则集,文件名不能错了要带s。下面看看根目录下的CMakeLists.txt(用到4个CMakeLists.txt)
PROJECT(cmake_project) #项目名,不能有空格。我试了下,有空格时cmake会报找不到compliter
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) #cmake最小版本
#这里设置安装目录前缀为当前项目根目录,系统默认是/usr/local。不想安装到系统中,只是一个学习测试用。
SET(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR})
#源文件子项目
ADD_SUBDIRECTORY(src)
第行用途也写得很明白,就不多说啥了。
- src目录中2个目录,1个文件。lib 中是会使用到的库文件源码和头文件源码。test目录是一个简单测试用例。CMakeLists.txt是src子项目cmake运行规则集。看看
#添加共用库源文件
ADD_SUBDIRECTORY(lib)
#判断共用库头文件和库是否在根目录的lib,include中存在
if(EXISTS ${CMAKE_SOURCE_DIR}/include/hello.h AND EXISTS ${CMAKE_SOURCE_DIR}/lib/libhello.so)
MESSAGE("hello.h 头文件和libhello.so 找到了")
MESSAGE("开始添加hello库")
#先把共用库头文件和库文件加入项目搜索路径