CMake学习(五)
来源:互联网 发布:java 运算 类型 提升 编辑:程序博客网 时间:2024/06/04 19:38
四,更好一点的Hello World
从本小节开始,后面所有的构建我们都将采用out-of-source外部构建,约定的构建目录是工程目录下的build自录。
修改Helloworld支持安装
本节的任务如下:
1,为工程添加一个子目录src,用来存储源代码;
2,添加一个子目录doc,用来存储这个工程的文档hello.txt
3,在工程目录添加文本文件COPYRIGHT, README;
4,在工程目录添加一个runhello.sh脚本,用来调用hello二进制
5,将构建后的目标文件放入构建目录的bin子目录;
6,最终安装这些文件:将hello二进制与runhello.sh安装至/<prefix>/bin,将doc目录中的hello.txt、COPYRIGHT、README安装到/<prefix>/share/doc/cmake/t2,
首先我们先补上为添加的文件。
(1)添加doc目录及文件:
cd /backup/cmake/t2mkdir docvi doc/hello.txt随便填写一些内容并保存。
(2)在工程目录添加runhello.sh脚本,内容为:
hello(3)添加工程目录中的COPYRIGHT和README:
touch COPYRIGHTtouch README(4)下面改写各目录的CMakeLists.txt文件:
1)安装COPYRIGHT和README,直接修改主工程文件CMakelists.txt,加入以下指令:
INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/t2)2)安装runhello.sh,直接修改主工程文件CMakeLists.txt,加入如下指令:
INSTALL(PROGRAMS runhello.sh DESTINATION bin)3)安装doc中的hello.txt,这里有两种方式:一是通过在doc目录建立CMakeLists.txt并将doc目录通过ADD_SUBDIRECTORY加入工程来完成。
另一种方法是直接在工程目录通过INSTALL(DIRECTORY来完成),前者比较简单,各位可以根据兴趣自己完成,我们来尝试后者,顺便演示以下DIRECTORY的安装。
因为hello.txt要安装到/<prefix>/share/doc/cmake/t2,所以我们不能直接安装整个doc目录,这里采用的方式是安装doc目录中的内容,也就是使用”doc/”(有'/')。
(DIRECTORY后面连接的是所在Source目录的相对路径,但务必注意:
abc和abc/有很大的区别。如果目录名不以"/"结尾,那么这个目录将被安装为目标路径下的abc,
如果目录名以/结尾,代表将这个目录中的内容安装到目标路径,但不包括这个目录本身。)
在工程文件中添加
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake/t2)
此时工程目录下的CMakeLists.txt的内容为:
PROJECT(HELLO)ADD_SUBDIRECTORY(src bin)INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/t2)INSTALL(PROGRAMS runhello.sh DESTINATION bin)INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake/t2)
此时src目录下的CMakeLists.txt的内容为:
PROJECT(HELLO)ADD_EXECUTABLE(hello main.c)
(5)运行测试:
现在进入build目录进行外部编译,注意使用CMAKE_INSTALL_PREFIX参数,这里我们
将它安装到了/tmp/t2目录:
cmake -DCMAKE_INSTALL_PREFIX=/tmp/t2/usr ..
然后运行
makemake install
让我们进入/tmp/t2目录看一下安装结果:
./usr./usr/share./usr/share/doc./usr/share/doc/cmake./usr/share/doc/cmake/t2./usr/share/doc/cmake/t2/hello.txt./usr/share/doc/cmake/t2/README./usr/share/doc/cmake/t2/COPYRIGHT./usr/bin./usr/bin/hello./usr/bin/runhello.sh
如果你要直接安装到系统,可以使用如下指令:
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
一个疑问
如果我没有定义CMAKE_INSTALL_PREFIX会安装到什么地方?
你可以尝试以下,cmake ..;make;make install,你会发现
CMAKE_INSTALL_PREFIX的默认定义是/usr/local
- CMake学习(五)
- cmake学习笔记(五)
- cmake学习(五) 系统默认变量和内置变量
- CMake 手册详解(五)
- CMake 手册详解(五)
- CMake 手册详解(五)
- CMake 学习(-)
- CMake学习(一)
- CMake学习(二)
- CMake学习(三)
- CMake学习(四)
- CMake学习(六)
- CMake学习(七)
- CMake学习(一)
- CMake学习(二)
- Cmake 自学笔记(linux)(五)
- CMake 实例学习(五) 动/静态库共存
- cmake学习笔记(一)
- PullToRefresh使用详解(一)--构建下拉刷新的listView
- C++编码规范 —— Google C++ Style
- 学习数据挖掘决策树ID3算法
- 10 个常见的 Linux 终端仿真器
- 动画触发
- CMake学习(五)
- java中的死锁
- 区间覆盖问题(贪心)
- JavaMail创建和发送邮件
- docker搭建duboo连接zookeeper
- Zookeeper集群搭建
- LeetCode-Easy部分中标签为 Binary Search 441. Arranging Coins
- ulua lua中的时间戳实现中出现的数值类型问题,long错误不能识别的解决方案
- 程序员必看,学习的方法