CMAKE_INSTALL_PREFIX 可以用来指定工程安装的目录,如果没有指定INSTALL将会默认安装在/usr/local目录下面。
cmake –DCMAKE_INSTALL_PREFIX=/usr/local ../
INSTALL指令用于定义安装规则,安装的内容可以包括目标二进制、动态库、静态库以及文件、目录、脚本等。
- 安装TARGET
install(TARGETS targets... [EXPORT <export-name>]
[[ARCHIVE|LIBRARY|RUNTIME|FRAMEWORK|BUNDLE|
PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE]
[DESTINATION <dir>]
[INCLUDES DESTINATION [<dir> ...]]
[PERMISSIONS permissions...]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>]
[OPTIONAL] [NAMELINK_ONLY|NAMELINK_SKIP]
] [...])
ARCHIVE特指静态库,LIBRARY特指动态库,RUNTIME特指可执行目标二进制。
DESTINATION定义了安装的路径,如果路径以/开头,那么指的是绝对路径,这时候CMAKE_INSTALL_PREFIX其实就无效了。如果不以/开头,那么安装的路径就是${CMAKE_INSTALL_PREFIX}/<DESTINATION定义的路径>
例子:
install(TARGETS myExe mySharedLib myStaticLib
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib/static)
install(TARGETS mySharedLib DESTINATION /some/full/path)
- 安装文件
install(<FILES|PROGRAMS> files... DESTINATION <dir>
[PERMISSIONS permissions...]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>]
[RENAME <name>] [OPTIONAL])
如果没有指定files是指令所在路径下的相对路径,如果默认不定义权限PERMISSIONS,安装后的权限为644权限,拥用者可读写,组与其他可读。如果是脚本之类的文件指定为PROGRAMES,则默认权限为755,即都可执行。
- 安装目录
install(DIRECTORY dirs... DESTINATION <dir>
[FILE_PERMISSIONS permissions...]
[DIRECTORY_PERMISSIONS permissions...]
[USE_SOURCE_PERMISSIONS] [OPTIONAL] [MESSAGE_NEVER]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>] [FILES_MATCHING]
[[PATTERN <pattern> | REGEX <regex>]
[EXCLUDE] [PERMISSIONS permissions...]] [...])
DIRECTORY 后面连接的是所在source目录的相对路径,但务必注意:abc和abc/有很大的区别。如果目录名不以/结尾,那么这个目录将被安装为目录路径下abc,如果目录名以/结尾,代表将这个目录中的内容安装到目标路径,但不包括这个目标本身。
PATTERN用于使用正则表达式进行过滤,PERMISSIONS用于指定PATTERN过滤后文件权限。
例1:安装src目录下所有.h文件到 include/myproject下
install(DIRECTORY src/ DESTINATION include/myproj
FILES_MATCHING PATTERN "*.h")
例2:
install(DIRECTORY icons scripts/ DESTINATION share/myproj
PATTERN "CVS" EXCLUDE
PATTERN "scripts/*"
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
GROUP_EXECUTE GROUP_READ)
将icons目录 以及scripts目录下的所有文件(不包含scripts目录本身)安装到share/myproj目录下面,icons将会是默认的权限,scripts目录下的文件将会特别的权限,同时不包含CSV目录。
- 安装CMake脚本
install([[SCRIPT <file>] [CODE <code>]]
[COMPONENT <component>] [...])
SCRIPT将会让安装过程中执行file.cmake脚本,file文件的路径是相对于当前源文件路径。CODE参数用于执行CMAKE指令,必须以双引号括起来,比如:
install(CODE "MESSAGE(\"Sample install message.\")")