0


CMAKE_INSTALL_PREFIX

一、定义

CMAKE_INSTALL_PREFIX为cmake的内置变量,用于指定cmake执行install命令时,安装的路径前缀。Linux下的默认路径是/usr/local ,Windows下默认路径是 C:/Program Files/${PROJECT_NAME}

二、用法

方法1,在执行cmake时,输入以下命令

cmake -DCMAKE_INSTALL_PREFIX=<你要的安装路径>

方法2,设置变量

SET(CMAKE_INSTALL_PREFIX <你要安装的路径>)

要安装在PROJECT<project_name> 之后

三、实例

1,新建工程,为工程添加一个子目录 src,用来存储源代码main.c;
2,添加一个子目录 doc,用来存储这个工程的文档 hello.txt
3,在工程目录添加文本文件 COPYRIGHT, README;
4,在工程目录添加一个 runhello.sh 脚本,用来调用 hello 二进制
4,将构建后的目标文件放入构建目录的 bin 子目录;
5,最终安装这些文件:将 hello 二进制与 runhello.sh 安装至/<prefix>/bin,将
doc 目录中的 hello.txt 以及 COPYRIGHT/README 安装到
/<prefix>/share/doc/cmake/t2

目录如下

main.c

#include <stdio.h>

int main()
{
    printf("Hello World from t1 Main!\n");
    return 0;
}

src下的CMakeLists.txt

SET(SRC_LIST main.c)

ADD_EXECUTABLE(hello ${SRC_LIST})

主目录下的 CMakeLists.txt

PROJECT(HELLO)

ADD_SUBDIRECTORY(src bin)

#安装文件
INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/t2)

#安装sh程序
INSTALL(PROGRAMS runhello.sh DESTINATION bin)

安装目录
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake/t2)

在工程目录添加 runhello.sh 脚本,内容为:hello
添加工程目录中的 COPYRIGHT 和 README的内容分别为
touch COPYRIGHT
touch README

下面改写各目录的 CMakeLists.txt 文件。
1,安装 COPYRIGHT/README,直接修改主工程文件 CMakelists.txt,加入以下指令:
INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/t2)
2,安装 runhello.sh,直接修改主工程文件 CMakeLists.txt,加入如下指令:
INSTALL(PROGRAMS runhello.sh DESTINATION bin)
3,安装 doc 中的 hello.txt,因为 hello.txt 要安装到/<prefix>/share/doc/cmake/t2,所以我们不能直接安装整个 doc 目录,这里采用的方式是安装 doc ”目录中的内容,也就是使用 doc/”
在工程文件中添加
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake/t2)
6,尝试我们修改的结果:
现在进入 build 目录进行外部编译,注意使用 CMAKE_INSTALL_PREFIX 参数,这里我们
将它安装到了/tmp/t2 目录:

cmake -DCMAKE_INSTALL_PREFIX=/tmp/t2/usr ..

然后运行

make
make install

查看生成的文件

参考:

CMAKE_INSTALL_PREFIX — CMake 3.25.1 Documentation

https://hongjh.blog.csdn.net/article/details/120170219

http://file.ncnynl.com/ros/CMake%20Practice.pdf

标签: linux 运维 c++

本文转载自: https://blog.csdn.net/sinat_31608641/article/details/128473571
版权归原作者 物随心转 所有, 如有侵权,请联系我们删除。

“CMAKE_INSTALL_PREFIX”的评论:

还没有评论