makefile之cmake入门

简介: cmake是一款生成makefile的软件;在生成makefile之前,首先是写一个CMakeLists.txt文件; 以下为典型例子:   先看目录tree, 在test文件夹中有:include目录, source目录, 以及main.

cmake是一款生成makefile的软件;在生成makefile之前,首先是写一个CMakeLists.txt文件;

以下为典型例子:

  先看目录tree, 在test文件夹中有:include目录, source目录, 以及main.c

                source目录下有afile.c, bfile.c

                include目录下有temp.h

  afile.c中: 

复制代码
#include "../include/temp.h"
#include <stdio.h>
void func_a()
{
        printf("this is func_a test\n");
}
复制代码

  bfile.c中:

复制代码
#include "../include/temp.h"
#include <stdio.h>
void func_b()
{    
        printf("this is func_b test\n");
}
复制代码

  temp.h中:

void func_a();
void func_b();

  main.c中:

复制代码
#include "include/temp.h"
int main()
{
     func_a();
     func_b();

    printf("hello world\n");
    return 0;
}
复制代码

  在test目录下新建文件CMakeLists.txt,  内容如下:

复制代码
PROJECT(main)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)

ADD_DEFINITIONS(-DENABLEDEBUG)
ADD_DEFINITITONS(-g)

AUX_SOURCE_DIRECTORY(source SRC_DIR)
SET(MAIN_DIR  main.c  ${SRC_DIR})

ADD_EXECUTABLE(main ${MINI_DIR})
复制代码

PROJECT指令的语法是:

  PROJECT(projectname [CXX] [C] [Java])
  可以用这个指令定义工程名称,并可指定工程支持的语言,支持的语言列表是可以忽略的,默认情况表示支持所有语言。

SET指令的语法是:

  SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])

  只需要了解SET指令可以用来显式的定义变量即可。比如我们用到的是SET(SRC_LIST main.c),如果有多个源文件,也可以定义成:SET(SRC_LIST main.c t1.c t2.c)

  

ADD_EXECUTABLE(hello  ${SRC_LIST})

  定义了这个工程会生成一个文件名为hello的可执行文件,相关的源文件是SRC_LIST中定义的源文件列表;  ${}是表示取值;

ADD_DEFINITIONS

  向C/C++编译器添加-D定义,比如:ADD_DEFINITIONS(-DENABLE_DEBUG),参数之间用空格分割

                  ADD_DEFITIONS(-g)

AUX_SOURCE_DIRECTORY(dir VARIABLE)作用是发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来自动构建源文件列表

  写完CMakeLists.txt之后;

        cmake .  之后就可以发现生成了makefile;

        make即可;

动态库构建   

复制代码
PROJECT (main)
ADD_DEFINITIONS(-DPOSIX)
ADD_DEFINITIONS(-DDEBUG)

AUX_SOURCE_DIRECTORY(source DIR_SRC)
SET(MAIN_SRCS   ${DIR_SRC})

ADD_LIBRARY(main  SHARED  ${MAIN_SRCS})
复制代码

静态库构建

复制代码
PROJECT (main)
ADD_DEFINITIONS(-DPOSIX)
ADD_DEFINITIONS(-DDEBUG)

AUX_SOURCE_DIRECTORY(source DIR_SRC)
SET(MAIN_SRCS   ${DIR_SRC})

ADD_LIBRARY(main  STATIC  ${MAIN_SRCS})
复制代码

安装库和头文件

1.只需在CMakeLists.txt添加:
  共享库(动态库)加入:

  INSTALL(TARGETS main LIBRARY DESTINATION lib)

  静态库则加入:

  INSTALL(TARGETS main ARCHIVE DESTINATION lib)

2.头文件安装命令:

  INSTALL(FILES include/tmp.h DESTINATION include/lib)

3.通过:

  cmake -DCMAKE_INSTALL_PREFIX=/usr .

  make

  make install

  可以将头文件和共享库安装到系统目录/usr/lib和/usr/include中

相关文章
|
9月前
|
存储 自然语言处理 Linux
CMake基础(1)初识CMake
CMake基础(1)初识CMake
71 0
|
9月前
Makefile(1)入门
Makefile(1)入门
61 0
|
Java Linux 编译器
CMake从入门到弃坑
CMake 说明 cmake的定义是什么 ?-----高级编译配置工具 当多个人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候神器就出现了-----CMake!
150 1
CMake实战(二)
上一篇《CMake实战(一)》我们是把所有文件放在同一个目录下,而平常开发时,我们会将源文件进行分类,放到不同的目录下。接下来我们来看一下具体要怎么操作。
CMake实战(三)
前面两篇《CMake实战(一)》,《CMake实战(二)》,主要是介绍单目录和多目录的编译,接下来看一下自定义编译选项和交叉编译。
CMake实战(一)
CMake和Autotools一样,都是项目构建工具。可以简单理解为,帮助我们生成Makefile,方便编译。
CMake教程10:编写CMake中遇到的问题
CMake教程10:编写CMake中遇到的问题
1260 0
|
关系型数据库 MySQL C语言
cmake编译问题解决
<p><br></p> <p></p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px; font-family:Arial; font-size:14px; line-height:26px"> <strong>2 安装cmake软件包</strong><br> yu
30932 0
|
IDE 开发工具
CMake教程3:最简单的CMake可执行程序
CMake教程3:最简单的CMake可执行程序
206 0
|
IDE 编译器 开发工具
CMake教程1:CMake是什么?
CMake教程1:CMake是什么?
165 0

热门文章

最新文章