CMake教程之安装部署工程

关于CMake的使用,今天简单记录下关于其安装和共享库使用的方式。
关于安装
如下trunk工程目录:
这里写图片描述

这里需要将main可执行文件和runhello.sh脚本文件安装到统一目录下,关于文档和COPYRIGHT安装到文档目录下。
如下是当前目录下的CMakeLists.txt文件内容:

  1 PROJECT (HELLO)
  2 ADD_SUBDIRECTORY(source)
  3 INSTALL(FILES COPYRIGHT README DESTINATION share/trunk/)
  4 INSTALL(PROGRAMS runhello.sh DESTINATION share/trunk/bin)
  5 INSTALL(DIRECTORY doc/ DESTINATION share/trunk/doc)

如上分别是安装文件、程序、目录的方式
在source下的CMakeLists.txt内容如下:

  1 ADD_EXECUTABLE(hello main.c)
  2 INSTALL(TARGETS hello RUNTIME DESTINATION share/trunk/bin)

如上为安装可执行文件的方式。

执行方式:
在根目录下创建bin文件:
cmake -DCMAKE_INSTALL_PREFIX=/tmp …
这里用于测试安装到tmp目录下。
make
make install
然后在安装的目录下查看安装的文件

共享库
关于共享库,首先先使用cmake编译生成一个简单的共享库
如下lib_trunk目录下的文件:
这里写图片描述

hello.h:

void HelloFunc();

hello.cpp:

  7 #include <stdio.h>
  8 
  9 #include "hello.h"
 10 
 11 void HelloFunc()
 12 {
 13     printf("hello world\n");
 14 }

查看lib下的CMakeLists.txt内容如下:

  1 SET(LIBHELLO_SRC hello.c)
  2 #这种方式静态库和动态库的名字不能一样
  3 ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})
  4 #生成libhello_static.a
  5 ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC})
  6 #如果需要生成同样的前缀名,则如下:
  7 SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")
  8 
  9 #为了防止每次构建时删除同名的库,则添加如下:
 10 SET_TARGET_PROPERTIES(hello PROPERTIES CLEAN_DIRECT_OUTPUT 1)
 11 SET_TARGET_PROPERTIES(hello_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
 12 
 13 #添加库版本号,version为库版本,SOVERSION为API版本
 14 SET_TARGET_PROPERTIES(hello PROPERTIES VERSION 1.2 SOVERSION 1)
 15 SET_TARGET_PROPERTIES(hello_static PROPERTIES VERSION 1.2 SOVERSION 1)
 16 
 17 INSTALL(TARGETS hello LIBRARY DESTINATION lib)
 18 INSTALL(TARGETS hello_static ARCHIVE DESTINATION lib)
 19 INSTALL(FILES hello.h DESTINATION include/hello)

如上是生成.so和.a 的方式,具体有注释说明,下面是的install是添加动态库和头文件到目标文件下。
编译和安装:
同样根目录下创建bin文件:
cmake -DCMAKE_INSTALL_PREFIX=/usr …
make
make install
安装完后就可以写一个demo对该库进行使用:
如下是use_lib_trunk目录下的文件:
这里写图片描述

main.c内容:

  8 #include <stdio.h>
  9 #include "hello.h"
 10 
 11 
 12 int main()
 13 {
 14     HelloFunc();
 15 
 16     return 0;
 17 }

main.c引用了hello.h的头文件,调用了共享库hello的函数HelloFunc()的内容。
在source下的CMakeLists加如下对共享库的使用:

  1 ADD_EXECUTABLE(main main.c)
  2 INCLUDE_DIRECTORIES(/usr/include/hello)
  3 TARGET_LINK_LIBRARIES(main hello)

首先是头文件的目录位置,其次是对应的共享库名。默认到/usr/lib下找。
同样跟目下创建bin文件:
cmake …
make
然后执行main可执行文件即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非正经程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值