应用场景抛出: linux下如何安装编译生成的目标文件???
常见安装方式有两种:
- 代码编译完成后,直接运行 make install 命令进行安装
- 打包时制定目
一个简单的Makefile栗子
DESTDIR=
PREFIX=/usr
install:
mkdir -p $(DESTDIR)/$(PREFIX)/bin
install -m 755 hello $(DESTDIR)/$(PREFIX)/bin
运行 make install, 将 hello 直接安装在/usr/bin 目录.
也可以通过 make install DESTDIR=/tmp/test 将它安装在/tmp/test/usr/bin 目录.
那么在cmake中,同样支持 INSTALL 命令, 并且还有一个非常有用的变量 CMAKE_INSTALL_PREFIX
常见的用法
cmake -DCMAKE_INSTALL_PREFIX=/usr .
INSTALL 命令用于定义安装规则,安装内容包括可执行文件,静态库,动态库以及文件,目录,脚本等
INSTALL命令格式:
INSTALL(TARGETS target...
[ [ARCHIVE|LIBRARY|RUNTIME]
[DESTINATION <dir>]
] [...])
命令解释:
TARGETS 后面跟的可能是二进制,动态库,静态库中的某一种或者全是
目标类型也相对的有三种: ARCHIVE特指静态库,LIBRARY特指动态库,RUNTIME特质可执行目标二进制
DESTINATION 定义安装路径,如果以" /" 开头,则说明指定的是绝对路径,此时的CMAKE_INSTALL_PREFIX就无效了
应用举栗子:
INSTALL(TARGETS myrun mylib mystaticlib
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION libstatic
)
上面的例子会将:
可执行二进制 myrun 安装到${CMAKE_INSTALL_PREFIX}/bin 目录
动态库 libmylib 安装到${CMAKE_INSTALL_PREFIX}/lib 目录
静态库 libmystaticlib 安装到${CMAKE_INSTALL_PREFIX}/libstatic 目录
PS: 特别注意的是你不需要关心 TARGETS 具体生成的路径,只需要写上 TARGETS 名称就可以
了。