C++ Cmake学习(三):工程化和安装


学习通道:

Cmake下载地址:

Cmake官网:


让Hello World看起来更像一个工程

为工程添加一个子目录src,用来防止工程源代码 添加一个子目录doc,用来放置工程的文档hello.txt 在工程目录添加一个runhello.sh脚本,用来调用hello二进制 将构建后的目标文件放入构建目录的bin子目录 将doc目录的内容以及COPYRIGHT/README安装到/usr/share/doc/cmake

将目标文件放入构建目录的bin子目录

每个目录下都要有一个CMakeLists.txt说明 外层CMakeLists.txt PROJECT(HELLO) ADD_SUBDIRECTORY(src bin) src下的CMakeLists.txt ADD_EXECUTABLE(hello main.cpp)

ADD_SUBDIRECTORY指令

ADD_SUBDIRECTORY(source_dir [binary_dir][EXCLUDE_FROM_ALL]) 这个指令用于向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置 EXCLUDE_FROM_ALL函数是将写的目录从编译中排除,如程序中的example ADD_SUBDIRECTORY(src bin) 将src子目录加入工程并指定编译输出(包含编译中间结果)都将存放在build/src目录

更改二进制的保存路径

SET指令重新定义EXECUTABLE_OUTPUT_PATH和LIBRARY_OUTPUT_PATH变量来指定最终的二进制的位置 SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

安装

方法一是从代码编译后直接make install安装 方法二是打包时指定目录安装:例如简单的可以使用指令:make install DESTDIR=/tmp/test 稍微复杂一点可以使用指令:./configure -prefix=/usr

如何安装HelloWord

使用CMAKE一个新的指令:INSTALL INSTALL的安装可以包括:二进制、动态库、静态库以及文件、目录、脚本等 使用CMAKE一个新的变量:CMAKE_INSTALL_PREFIX 目录树结构:

安装文件COPYRIGHT和README

INSTALL(FILE COPYRIGHT README DESTINATION share/doc/cmake) FILES:文件 DISTINATION: 1、写绝对路径 2、可以写相对路径,相对路径实际是:${CMAKE_INSTALL_PREFIX}/<DESTINATION 定义的路径> CMAKE_INSTALL_PREFIX默认是在/usr/local cmake-DCMAKE_INSTALL_PREFIX=/usr 在cmake的时候指定CMAKE_INSTALL_PREFIX变量的路径

安装脚本runhello.sh

PROGRAMS:非目标文件的可执行程序安装(比如脚本之类) INSTALL(PROGRAMS runhello.sh DESTINATION bin) 说明:实际安装到的是/usr/bin

安装doc中的hello.txt

一、是通过在doc目录简历CMakeLists.txt,通过install下的file 二、是直接在工作目录通过 INSTALL(FILE COPYRIGHT README DESTINATION share/doc/cmake) DIRECTORY后面连接的是所在Source目录的相对路径 注意:abc和abc/有很大的区别 目录名不以/结尾:这个目录将被安装为目录路径下的 目录名以/结尾:被这个目录中的内容安装到目标路径

开始编译安装

经验分享 程序员 微信小程序 职场和发展