cmake简介(PART IV: 文件的安装)

项目构建好之后,需要进行安装,使用cmake可以很方便的将不同类型的文件安装到不同的文件夹下。在本文中,我们要将生成的二进制文件安装到目标目录下的bin中,.h文件安装到include文件夹下,而生成的两个.a文件安装到lib中。

项目文件结构

这次的项目文件结构和之前的相同:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.
├── build
├── cmake
│   └── config.h.in
├── CMakeLists.txt
├── include
│   ├── config.h
│   ├── echo.h
│   └── operations.h
├── lib
│   ├── CMakeLists.txt
│   ├── echo.c
│   └── operations.c
└── main.c

CMAKE_INSTALL_PREFIX变量

CMAKE_INSTALL_PREFIX变量是cmake的一个内置变量,它的作用和使用传统./configure安装时的--prefix=<path>作用是相同的,即指定文件的安装位置,在默认的情况下,该变量的位置是/usr/local/

如果在安装时,要制定到其他位置,需要使用

1
cmake -DCMAKE_INSTALL_PREFIX:PATH=<path>

操作过程

  • 二进制文件和头文件的安装

    我们最终生成的二进制文件名为hello,我们期望将它安装在bin目录中,那么需要在项目根目录下的CMakeList.txt中添加如下一行:

    1
    install (TARGETS hello DESTINATION bin)

    其中TARGETS为固定,TARGETS后面跟多个文件,这些文件将被安装到DESTINATION指定的文件夹中,也就是bin文件夹。这里的DESTINATION也是固定用法。

    安装头文件与此类似:

    1
    install (FILES "${PROJECT_SOURCE_DIR}/include/config.h" DESTINATION include)

    不过这里使用FILES而不是TARGETS。这里我们将项目目录下include/config.h文件安装到include文件夹中。

  • 库文件的安装

    由于我们的库文件在lib文件夹下,因此对于库文件的安装可以把install()命令写在lib文件夹下的CMakeList.txt中。

    lib/CMakeLists.txt修改为如下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    if (DUMP_HELLO)
    add_library(echo echo.c)
    install (TARGETS echo DESTINATION lib)
    endif (DUMP_HELLO)
    add_library(operations operations.c)
    install (TARGETS operations DESTINATION lib)

重新编译安装

假如我们要安装到/tmp/hello,那么执行:

1
2
3
4
cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=/tmp/hello ..
make
make install

使用tree命令可以看到:

1
2
3
4
5
6
7
8
/tmp/hello
├── bin
│   └── hello
├── include
│   └── config.h
└── lib
├── libecho.a
└── liboperations.a

¶ The end

Share Link: http://d0u9.win/posts/1034170720.html