cmake写个install例子将文件安装到指定目录
时间: 2023-05-20 21:00:49 浏览: 414
好的,以下是一个简单的CMake install例子,将文件安装到指定目录:
```
cmake_minimum_required(VERSION 3.0)
project(MyProject)
# 添加要安装的文件
set(MY_FILES my_file.txt)
# 设置安装目录
set(INSTALL_DIR /usr/local/my_project)
# 添加可执行文件
add_executable(my_executable main.cpp)
# 安装可执行文件
install(TARGETS my_executable DESTINATION ${INSTALL_DIR})
# 安装文件
install(FILES ${MY_FILES} DESTINATION ${INSTALL_DIR})
```
这个例子将可执行文件 `my_executable` 和文件 `my_file.txt` 安装到 `/usr/local/my_project` 目录下。
相关问题
记住cmake代码cmake_minimum_required(VERSION 3.16) # 声明该项目的名称和版本号 project(MyLib VERSION 1.0) # 添加库代码文件到该库 add_library(mylib STATIC src/header.cpp) add_library(mylib_shared SHARED src/header.cpp) include_directories(include) # 指定install路径,以便于其他项目找到该库 install(TARGETS mylib mylib_shared EXPORT MyLibTargets ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin) install(FILES include/header.h DESTINATION include) # 生成MyLibConfig.cmake文件 include(CMakePackageConfigHelpers) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfigVersion.cmake" VERSION ${MyLib_VERSION} COMPATIBILITY AnyNewerVersion ) configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/MyLibConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfig.cmake" INSTALL_DESTINATION cmake ) # install( # EXPORT MyLibTargets # NAMESPACE MyLib:: # DESTINATION cmake # ) export(EXPORT MyLibTargets NAMESPACE MyLib:: FILE MyLibTargets.cmake) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/MyLibTargets.cmake DESTINATION cmake) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfigVersion.cmake" DESTINATION cmake ),并在/home/czl/cmake_lib/build目录下执行命令cmake .. -DCMAKE_INSTALL_PREFIX=/home/czl/pkg_test,并告诉我生成的MyLibTargets.cmake文件中,静态库的引用路径是什么
生成的MyLibTargets.cmake文件中,静态库的引用路径是:
```
target_link_libraries(MyLib::mylib INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/../lib/libmylib.a>
$<INSTALL_INTERFACE:lib/libmylib.a>
)
```
其中,`$<BUILD_INTERFACE>`指的是在构建项目时引用的路径,`$<INSTALL_INTERFACE>`指的是在安装项目后引用的路径。在这个例子中,静态库`libmylib.a`在构建项目时的路径为`${CMAKE_CURRENT_LIST_DIR}/../lib/libmylib.a`,在安装项目后的路径为`lib/libmylib.a`。
使用cmake生成target.cmake文件以供其他cmake文件find_package(),其中引用的库文件和头文件路径,能够根据install位置自行生成,举个详细的例子
好的,我来举个例子。
假设我们有一个名为"Example"的C++项目,其中包含一个名为"example"的可执行文件和一个名为"my_library"的动态库。我们想要使用CMake生成一个"ExampleConfig.cmake"文件,以便其他CMake项目可以使用"find_package()"命令找到和使用"Example"项目。
首先,我们需要在"Example/CMakeLists.txt"文件中添加以下代码:
```cmake
# 声明该项目的名称和版本号
project(Example VERSION 1.0)
# 添加my_library子目录,用于生成my_library库
add_subdirectory(my_library)
# 将可执行文件example链接到my_library库
add_executable(example example.cpp)
target_link_libraries(example my_library)
# 指定install路径,以便于其他项目找到该库
install(TARGETS example DESTINATION bin)
install(EXPORT ExampleConfig DESTINATION cmake)
# 生成ExampleConfig.cmake文件
export(TARGETS my_library FILE ExampleConfig.cmake)
```
接下来,我们需要在"Example/my_library/CMakeLists.txt"文件中添加以下代码:
```cmake
# 声明该库的名称和版本号
project(my_library VERSION 1.0)
# 添加库代码文件到该库
add_library(my_library SHARED my_library.cpp)
# 指定install路径,以便于其他项目找到该库
install(TARGETS my_library DESTINATION lib)
install(FILES my_library.h DESTINATION include)
```
在完成上述步骤之后,我们可以使用以下命令生成"ExampleConfig.cmake"文件:
```bash
mkdir build && cd build
cmake ..
cmake --build .
cmake --install .
```
生成的"ExampleConfig.cmake"文件应该如下所示:
```cmake
# 指定该项目的名称和版本号
set(EXAMPLE_VERSION 1.0)
set(EXAMPLE_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/include")
set(EXAMPLE_LIBRARIES "${CMAKE_INSTALL_PREFIX}/lib/libmy_library.so")
```
其他项目可以使用以下代码找到和使用"Example"项目:
```cmake
# 找到ExampleConfig.cmake文件
find_package(Example REQUIRED)
# 包含Example头文件
include_directories(${EXAMPLE_INCLUDE_DIRS})
# 链接Example库
target_link_libraries(my_target ${EXAMPLE_LIBRARIES})
```
希望这个例子能够帮助你理解如何使用CMake生成"target.cmake"文件以供其他CMake项目使用。
阅读全文