zoukankan      html  css  js  c++  java
  • makefile之cmake入门

    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
    ");
    }

      bfile.c中:

    #include "../include/temp.h"
    #include <stdio.h>
    void func_b()
    {    
            printf("this is func_b test
    ");
    }

      temp.h中:

    void func_a();
    void func_b();

      main.c中:

    #include "include/temp.h"
    int main()
    {
         func_a();
         func_b();
    
        printf("hello world
    ");
        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中

  • 相关阅读:
    Chandy-Lamport_algorithm
    3 differences between Savepoints and Checkpoints in Apache Flink
    列数 行数 表数 限制
    数据收集、传输、元数据管理、作业流调度、海量数据查询引擎、数据可视化
    分析云负载均衡产品
    端口被占用通过域名的处理 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则
    JSON Web Token
    查看开启端口的应用
    If the parts of an organization (e.g., teams, departments, or subdivisions) do not closely reflect the essential parts of the product, or if the relationship between organizations do not reflect the r
    微服务架构的理论基础
  • 原文地址:https://www.cnblogs.com/chris-cp/p/3484684.html
Copyright © 2011-2022 走看看