C++ Cmake学习(三):工程化和安装
2022/3/19 17:27:49
本文主要是介绍C++ Cmake学习(三):工程化和安装,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
让Hello World看起来更像一个工程
将目标文件放入构建目录的bin子目录
ADD_SUBDIRECTORY指令
更改二进制的保存路径
安装
如何安装HelloWord
安装文件COPYRIGHT和README
安装脚本runhello.sh
安装doc中的hello.txt
开始编译安装
学习通道:从零开始详细介绍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/有很大的区别
目录名不以/结尾:这个目录将被安装为目录路径下的
目录名以/结尾:被这个目录中的内容安装到目标路径
开始编译安装
这篇关于C++ Cmake学习(三):工程化和安装的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享