您的位置:首页 > 其它

CMake学习笔记(2)——建立一个标准的工程和安装程序

2016-06-26 17:24 656 查看
接下来让建立一个更加标准的工程t2。

这个工程的目录结构如下:

t2
├── build
├── CMakeLists.txt
├── COPYRIGHT
├── doc
│   └── hello.txt
├── README
├── runhello.sh
└── src
├── CMakeLists.txt
└── main.c


build:是编译生成的文件的目录;

doc:是工程文本文件;

COPYRIGHT:版权说明;

README:工程说明;

runhello.sh:是程序执行文件,内容为执行文件的名称hello。

这里有两个CMakeLists.txt,一个在工程目录下,一个在src目录下,如果工程存在多个目录,需要确保每个目录都有一个CMakeLists.txt文件。

这两个存在一种包含关系内容分别为:

工程目录下的CMakeLists.txt:

PROJECT(HELLO)
ADD_SUBDIRECTORY(src bin)


src下的CMakeLists.txt:

ADD_EXECUTABLE(hello main.c)
SET(EXECUTALBE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)


ADD_SUBDIRECTORY可以添加子目录,这里添加了src目录,还可以指定编译后的二进制文件输出目标,这里是bin文件;

EXECUTALBE_OUTPUT_PATH:编译输出目录,这里通过SET重新定义变量EXECUTALBE_OUTPUT_PATH来将指定最终的二进制文件输出目录。

main.c文件的内容:

//main.c
#include <stdio.h>

int main()
{
printf("hello world\n");

return 0;
}


然后进入build目录构建:

cmake ..
make


以下是编译后的t2工程目录结构:

t2
├── build
│   ├── bin
│   │   ├── CMakeFiles
│   │   │   ├── CMakeDirectoryInformation.cmake
│   │   │   ├── hello.dir
│   │   │   │   ├── build.make
│   │   │   │   ├── C.includecache
│   │   │   │   ├── cmake_clean.cmake
│   │   │   │   ├── DependInfo.cmake
│   │   │   │   ├── depend.internal
│   │   │   │   ├── depend.make
│   │   │   │   ├── flags.make
│   │   │   │   ├── link.txt
│   │   │   │   ├── main.o
│   │   │   │   └── progress.make
│   │   │   └── progress.marks
│   │   ├── cmake_install.cmake
│   │   ├── <span style="color:#ff0000;">hello</span>
│   │   └── Makefile
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   │   ├── CMakeCCompiler.cmake
│   │   ├── cmake.check_cache
│   │   ├── CMakeCXXCompiler.cmake
│   │   ├── CMakeDetermineCompilerABI_C.bin
│   │   ├── CMakeDetermineCompilerABI_CXX.bin
│   │   ├── CMakeDirectoryInformation.cmake
│   │   ├── CMakeOutput.log
│   │   ├── CMakeSystem.cmake
│   │   ├── CMakeTmp
│   │   │   └── CMakeFiles
│   │   │       └── cmTryCompileExec.dir
│   │   ├── CompilerIdC
│   │   │   ├── a.out
│   │   │   └── CMakeCCompilerId.c
│   │   ├── CompilerIdCXX
│   │   │   ├── a.out
│   │   │   └── CMakeCXXCompilerId.cpp
│   │   ├── Makefile2
│   │   ├── Makefile.cmake
│   │   ├── progress.marks
│   │   └── TargetDirectories.txt
│   ├── cmake_install.cmake
│   └── Makefile
├── CMakeLists.txt
├── CMakeLists.txt~
├── COPYRIGHT
├── doc
│   └── hello.txt
├── README
├── runhello.sh
└── src
├── CMakeLists.txt
└── main.c


可以看到在t2/build/bin目录下有一个名为hello的可执行文件。

接下来我们可以安装这个可执行文件到指定的目录:

INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/t2)
INSTALL(PROGRAMS build/bin/hello runhello.sh DESTINATION bin)
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake/t2)


INSTALL指令,可以安装指定的文件到指定的目录下面。

第一个参数指定要安装的文件的类型,第二个参数DESTINATION指定安装的具体目录。

重新构建工程:

cmake -DCMAKE_INSTALL_PREFIX=/tmp/t2/usr ..
make
make install
这里CMAKE_INSTALL_PREFIX指定安装目录。

执行make install的时候输出:

[100%] Built target hello
Install the project...
-- Install configuration: ""
-- Installing: /tmp/t2/usr/share/doc/cmake/t2/COPYRIGHT
-- Installing: /tmp/t2/usr/share/doc/cmake/t2/README
-- Installing: /tmp/t2/usr/bin/hello
-- Installing: /tmp/t2/usr/bin/runhello.sh
-- Installing: /tmp/t2/usr/share/doc/cmake/t2
-- Installing: /tmp/t2/usr/share/doc/cmake/t2/hello.txt


最后的安装结果是:

t2/
└── usr
├── bin
│   ├── hello
│   └── runhello.sh
└── share
└── doc
└── cmake
└── t2
├── COPYRIGHT
├── hello.txt
└── README
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: