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


0 0
原创粉丝点击