• 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中

  • 相关阅读:
    Android Studio 快捷键(包含自定义)终极版
    C#开发模式——dll多级引用的问题
    WPF实现QQ群文件列表动画(二)
    WPF实现QQ群文件列表动画(一)
    VS2010Datatable查看器查看超时(Microsoft.VisualStudio.DebuggerVisualizers)
    WPF里ItemsControl的分组实现
    WPF触控程序开发(四)——MultiTouchVista_-_second_release_-_refresh_2的救赎
    WPF异步回调时回调函数如何获取异步函数产生的变量
    裸奔着造房子——对政府禁止采购Win8系统的一些看法
    全球征集-如何实现回文SQL的查询
  • 原文地址:https://www.cnblogs.com/chris-cp/p/3484684.html
Copyright © 2020-2023  润新知