CMake 是一个跨平台的安装( 编译 )工具,基于 Makefile做的二次开发,主要是Makefile难度太大了。可以用简单的 语句来描述所有平台安装 (编译过程 )。他能够输出各种样的 makefile或者 project文件,能测试 编译器 所支持的 C++ 特性 ,类似UNIX 下的 automake 。只是 CMake的组态档 取名为 CMakeLists.txt。Cmake并不直接建构出最终的软件,而是产生标准档 (如 Unix的 Makefile或 WindowsVisual C++ 的 projects/workspaces,然后 再依一般的建构方式使用。
下面举例说明操作。
1、整个目录结构
CmakeLists.txt
# 单个目录实现
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 工程,他不是执行文件名
PROJECT(Darren)
# 手动加入文件 ${变量名}} ,比如${SRC_LIST}
SET(SRC_LIST main.c)
set(SRC_LIST2 main2.c)
# MESSAGE和echo类似
MESSAGE(STATUS "PROJECT_BINARY_DIR DIR " ${PROJECT_BINARY_DIR})
MESSAGE(STATUS "PROJECT_SOURCE_DIR DIR " ${PROJECT_SOURCE_DIR})
# 生产执行文件名0voice 0voice2
ADD_EXECUTABLE(0voice ${SRC_LIST})
ADD_EXECUTABLE(0voice2 ${SRC_LIST2})
main.c
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("0voice CMake!!!\n");
return 0;
}
在CMakeLists.txt所在当前目录cmake.,运行会发现会生成Makefile、CMakeCache.txt、CMakeFiles、cmake_install.cmake中间文件。
执行 make生成
在上一级目录操作,如下图:
2、 3.1-1的目录结构
dir1下的所有源码如图
dir2下的所有源码如图
根目录CMakeLists.txt
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
PROJECT(0VOICE)
ADD_SUBDIRECTORY(src)
MESSAGE(STATUS "TOP CMAKE_CURRENT_SOURCE_DIR -> " ${CMAKE_CURRENT_SOURCE_DIR})
INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/0voice)
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake/0voice)
main.c
#include <stdio.h>
#include "dir1.h"
#include "dir2.h"
int main(int argc, char *argv[])
{
printf("0voice CMake!!!\n");
printDir1();
printDir2();
return 0;
}
默认是静态库,静态库操作时没有问题。
下面动态库安装后运行有问题。
不同系统搜索路径不一样,可以把/usr/local/lib加入到/etc/ld.so.conf,然后ldconfig后再运行程序,完美运行。
本专栏知识点是通过<零声教育>的线上课学习,进行梳理总结写下文章,对c/c++linux课程感兴趣的读者,可以点击链接,详细查看课程的服务。