admin管理员组文章数量:1635843
一、函数介绍
install命令
install用于指定在安装时运行的规则。它可以用来安装很多内容,可以包括目标二进制、动态库、静态库以及文件、目录、脚本等:
install(TARGETS <target>... [...])
install({FILES | PROGRAMS} <file>... [...])
install(DIRECTORY <dir>... [...])
install(SCRIPT <file> [...])
install(CODE <code> [...])
install(EXPORT <export-name> [...])
二、调用格式
install(TARGETS targets... [EXPORT <export-name>]
[RUNTIME_DEPENDENCIES args...|RUNTIME_DEPENDENCY_SET <set-name>]
[[ARCHIVE|LIBRARY|RUNTIME|OBJECTS|FRAMEWORK|BUNDLE|
PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE]
[DESTINATION <dir>]
[PERMISSIONS permissions...]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>]
[NAMELINK_COMPONENT <component>]
[OPTIONAL] [EXCLUDE_FROM_ALL]
[NAMELINK_ONLY|NAMELINK_SKIP]
] [...]
[INCLUDES DESTINATION [<dir> ...]]
)
三、常见用法
在cmake的时候,最常见的几个步骤就是:
mkdir build && cd build
cmake ..
make
make install
那么,make install的时候,是需要我们定义一个install的目标么?
显然并不需要,作为一个经常需要被运行的指令,官方提供了一个命令install,只需要经过该命令的安装内容,不需要显式地定义install目标。此时,make install就是运行该命令的内容。
举个简单的例子:
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目录
特别注意的是你不需要关心TARGETS具体生成的路径,只需要写上TARGETS名称就可以
了。
四、案例工程Installing介绍
4.1 案例介绍
此示例说明如何生成 make install 目标以在您的系统上安装文件和二进制文件。这是基于前面的共享库示例。
本教程中的文件如下:
$ tree
.
├── cmake-examples.conf
├── CMakeLists.txt
├── include
│ └── installing
│ └── Hello.h
├── README.adoc
└── src
├── Hello.cpp
└── main.cpp
-
CMakeLists.txt - 包含您希望运行的 CMake 命令
-
cmake-examples.conf - 示例配置文件
-
include/installing/Hello.h - 要包含的头文件
-
src/Hello.cpp - 要编译的源文件
-
src/main.cpp - 带有 main 的源文件
4.2 基本概念
CMake 提供了添加 make install 目标的功能,以允许用户安装二进制文件、库和其他文件。基本安装位置由变量 CMAKE_INSTALL_PREFIX 控制,该变量可以使用 ccmake 或使用 cmake 调用 cmake .. -DCMAKE_INSTALL_PREFIX=/install/location
安装的文件由 install() 函数控制。
install (TARGETS cmake_examples_inst_bin DESTINATION bin)
将从目标 cmake_examples_inst_bin 目标生成的二进制文件安装到目标
${CMAKE_INSTALL_PREFIX}/bin
install (TARGETS cmake_examples_inst LIBRARY DESTINATION lib)
将目标cmake_examples_inst目标生成的共享库安装到目标
${CMAKE_INSTALL_PREFIX}/lib
Note | This may not work on windows. On platforms that have DLL targets you may need to add the following install (TARGETS cmake_examples_inst LIBRARY DESTINATION lib RUNTIME DESTINATION bin) |
install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/ DESTINATION include)
Install the header files for developing against the cmake_examples_inst library into the ${CMAKE_INSTALL_PREFIX}/include directory.
install (FILES cmake-examples.conf DESTINATION etc)
Install a configuration file to the destination ${CMAKE_INSTALL_PREFIX}/etc
运行 make install 后,CMake 会生成一个 install_manifest.txt 文件,其中包含所有已安装文件的详细信息。
Note | 如果您以 root 身份运行 make install 命令,则 install_manifest.txt 文件将归 root 所有。 |
五、代码示例
$ mkdir build $ cd build/ $ cmake .. -- The C compiler identification is GNU 4.8.4 -- The CXX compiler identification is GNU 4.8.4 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Configuring done -- Generating done -- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/E-installing/build $ make Scanning dependencies of target cmake_examples_inst [ 50%] Building CXX object CMakeFiles/cmake_examples_inst.dir/src/Hello.cpp.o Linking CXX shared library libcmake_examples_inst.so [ 50%] Built target cmake_examples_inst Scanning dependencies of target cmake_examples_inst_bin [100%] Building CXX object CMakeFiles/cmake_examples_inst_bin.dir/src/main.cpp.o Linking CXX executable cmake_examples_inst_bin [100%] Built target cmake_examples_inst_bin $ sudo make install [sudo] password for matrim: [ 50%] Built target cmake_examples_inst [100%] Built target cmake_examples_inst_bin Install the project... -- Install configuration: "" -- Installing: /usr/local/bin/cmake_examples_inst_bin -- Removed runtime path from "/usr/local/bin/cmake_examples_inst_bin" -- Installing: /usr/local/lib/libcmake_examples_inst.so -- Installing: /usr/local/etc/cmake-examples.conf $ cat install_manifest.txt /usr/local/bin/cmake_examples_inst_bin /usr/local/lib/libcmake_examples_inst.so /usr/local/etc/cmake-examples.conf $ ls /usr/local/bin/ cmake_examples_inst_bin $ ls /usr/local/lib libcmake_examples_inst.so $ ls /usr/local/etc/ cmake-examples.conf $ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib cmake_examples_inst_bin Hello Install!
Note | If |
Extra Notes
覆盖默认安装位置
如前所述,默认安装位置是从 CMAKE_INSTALL_PREFIX 设置的,默认为 /usr/local/
如果要更改所有用户的默认位置,可以在添加任何二进制文件或库之前将以下代码添加到顶级 CMakeLists.txt。
if( CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT ) message(STATUS "Setting default CMAKE_INSTALL_PREFIX path to ${CMAKE_BINARY_DIR}/install") set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE STRING "The path to use for make install" FORCE) endif()
此示例将默认安装位置设置为您的构建目录下。
DESTDIR
如果您希望分阶段安装以确认包含所有文件,make install 目标支持 DESTDIR 参数。
make install DESTDIR=/tmp/stage
这将为您的所有安装文件创建安装路径 ${DESTDIR}/${CMAKE_INSTALL_PREFIX}。在此示例中,它将安装路径下的所有文件 /tmp/stage/usr/local
$ tree /tmp/stage
/tmp/stage
└── usr
└── local
├── bin
│ └── cmake_examples_inst_bin
├── etc
│ └── cmake-examples.conf
└── lib
└── libcmake_examples_inst.so
六、卸载
默认情况下,CMake 不会添加 make 卸载目标。有关如何生成卸载目标的详细信息,请参阅此常见问题解答要从本示例中删除文件的简单方法,您可以使用:
sudo xargs rm < install_manifest.txt
版权声明:本文标题:CMake知识:生成install工程 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729217476a1190589.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论