从零开始详细介绍CMake

第一讲:
cmake是什么:
多人使用不同的编程语言(相同),开发同一个项目,最终输出可知性文件/共享库-》cmake
操作通过cmakelist完成的。
为了处理大型c/cpp/java项目准备。
第二讲:cmake helloeworld编译
- 写一个helloworld文件
- 写一个cmakelist
- 编译
- cmake .
- make
- 生成可执行文件
第三讲:cmakelist语法介绍
- project关键字:工程名字和支持语言
- project (HELLO CXX/JAVA)
- project_binary_dir
- project_source_dir
- set关键字
- 显示指定变量/设置变量
- message
- 终端输出用户自定义信息
- send_error
- status
- fatal_error
- add_executable
- 生成可知性文件
- add(hello $(SRC_LIST})
- 工程名字和可执行文件没有关系
- 语法基本原则
- ${}读取变量
- 参数之间通过分好或者空格分割
- 指令部分大小写,参数和变量区分大小写
- main.cpp可加“”可不加“”
- ADD_EXE中文件名可以不加后缀
第四讲:内部构建和外部构建
- 内部构建产生临时文件;外部构建放在build里面
- 建立build dir
- 进入build
- cmake ..
- binary_dir /build; source_dir: 原始文件夹
- ;build:make
第五讲:helloworld看起来like工程
- 添加src目录,存放源代码;doc文档;runhello.sh; 目标文件bin;
- 目标文件放入bin
- 每一个目录下买年都要有cmakelist
- src touch cmakelist
- 先写工程目录的cmakelist
- PROJECT(HELLO)
- 关联起来:
- ADD——SUBDIR(src bin)(生成文件放入bin)
- 写src cmakelist
- add_executable(hello main.cpp)
- 更改二进制到bin
- camke ..(build)
- make
- 生成hello,生成bin(build),可知性文件在bin
- add_subdir:告诉smkae还有一个目录,
第六讲:安装helloworld
- make install
- make install 指定目录
- 二进制,动态库,静态库。。。
- 建立copyright
- 建立 doc
- doc:hello.txt
- 工程目录:readme
- 建立runhello.sh
- 安装文件copuriht readme
- 编译工程;cmakelist
- install(files copyright readme destination path) (最前面调用cmake install prefix, usr/local/share/doc/cmake/
- 安装脚本
- programs:非目标的可执行程序的安装
- install(programs runhello.sh destination bin) (usr/local/bin)
- 安装目录
- install(directory doc/(目录下的内容) destination share/loc/cmake)
- cd build; amke ..
- make; ./bin/hello!
- 安装:make install
第七讲:静态库和动态库的构建
- 静态库:.a, .lib;动态库:.so,.dll
- 静态库:直接整合到程序,动态库:编译时不放到程序中,运行时加载
- 任务1. 建立静态库和动态库
- 任务2:安装头文件和共享库
- 建立build;建立cmakelist;建立lib;进入lib
- 建立cmakelist;建立hello.cpp; touch hello.h;
- 项目cmakelist:
- project (hello)
- add_subdir(lib bin)
- cd lib;
- cmakelist:
- set (libhello_src hello.cpp)
- add_lib(hello shared/static ${libhello_src}) (没有hello.h,共享库名字libhello.so)
- cd build; cmake.. make; cd bin; -> libhello.so
第八讲:同时构建static和dynamic
- 名字一样指挥构建动态库,不会静态库(名字不一样可以)
- set_target_projecties
- 设置输出名字
- 安装共享库和头文件
- lib有头文件:安装头文件
- install (files helloh diest include/hello)
- install (targets hello hello_staic libraty(动态库关键字) destination lib archive desitaion lib)(相对路径)
- 默认/usr:
- cmake -DCMAKE_PREFIX=/usr ..
- make
- make install
第九讲:如何使用共享库和头文件
- mkdir build touch Cmakelist; make drc; cd src
- touch cmakelist; cd ..
- cd src; vim main.cpp; cd ..
- vim CMkalist
- project (hello)
- add_subdirrector(src bin)
- cd src; bim cmakelist
- add_executable(hello main.cpp)
- cd .. cd build cmake ..; make;
- include_directories(/usr/include/hello)(src cmakelist)
- link_directories/target_link_libraries