• 自动make工具--CMake


    CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。

    CMake 可以编译源代码、制作程式库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake 支持 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake 也支持静态与动态程式库的建构。
    “CMake”这个名字是“cross platform make”的缩写。虽然名字中含有“make”,但是CMake和Unix上常见的“make”系统是分开的,而且更为高阶。

    cmake应用

    cmake使用除了应用程序外,就是编写CMakeLists.txt文档,以生成Makefile文件。

    1. 每个目录下都需要文件CmakeLists.txt文件,CmakeLists.txt的编写需遵循cmake语法。

    2. 最好在根目录下,创建build文件夹,让后进入build文件夹构建工程,这样构建工程的中间文件及最后文件都在build中,直接发布build文件即可。

    3. 构建命令cd build; cmake ..; make;

    注:cmake后的..是上层目录意思。

    4. 生成可执行程序,运行即可。

    一个最简单示例

    //hello.c
    #include <stdio.h>
    int main()
    {
        printf("Hello World!
    ");
        return 0;
    }
    
    //CmakeLists.txt
    PROJECT(HELLO)
    SET(SRC_LIST hello.c)
    ADD_EXECUTABLE(hello ${SRC_LIST})

    流程:

    ~$pwd
    /home/yuxi/test/cmake/build
    ~$ls ..
    build  CMakeLists.txt  hello.c
    ~$cmake ..
    -- The C compiler identification is GNU
    
    -- The CXX compiler identification is GNU
    
    -- Check for working C compiler: /usr/bin/gcc
    
    -- Check for working C compiler: /usr/bin/gcc -- works
    
    -- Detecting C compiler ABI info
    
    -- Detecting C compiler ABI info - done
    
    -- Check for working CXX compiler: /usr/bin/c++
    
    -- Check for working CXX compiler: /usr/bin/c++ -- works
    
    -- Detecting CXX compiler ABI info
    
    -- Detecting CXX compiler ABI info - done
    
    -- Configuring done
    
    -- Generating done
    
    -- Build files have been written to: /home/yuxi/test/cmake/build
    
    ~$ls
    CMakeCache.txt  CMakeFiles  cmake_install.cmake  Makefile
    ~$make
    Scanning dependencies of target hello
    [100%] Building C object CMakeFiles/hello.dir/hello.c.o
    Linking C executable hello
    [100%] Built target hello
    ~$ls
    CMakeCache.txt  CMakeFiles  cmake_install.cmake  hello  Makefile
    ~$./hello
    Hello World!
    ~$ls CMakeFiles/
    CMakeCCompiler.cmake               CMakeOutput.log    Makefile2
    cmake.check_cache                  CMakeSystem.cmake  Makefile.cmake
    CMakeCXXCompiler.cmake             CMakeTmp           progress.marks
    CMakeDetermineCompilerABI_C.bin    CompilerIdC        TargetDirectories.txt
    CMakeDetermineCompilerABI_CXX.bin  CompilerIdCXX
    CMakeDirectoryInformation.cmake    hello.dir

    Cmake debug和release设置

    1. 通过命令行指定

    cmake -DCMAKE_BUILD_TYPE=Release/Debug ..

    2. 在CMakeLists.txt中设置(目前不起作用)

    SET(CMAKE_BUILD_TYPE "Debug”)
    or
    SET(CMAKE_BUILD_TYPE "Release")

    同时可在CMakeLists.txt中设置release和debug编译选项

    SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
    SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

    参考:

    1. cmake快速入门

    2. CMake快速使用教程

  • 相关阅读:
    java 获取json字符串中key对应的值
    location.href跳转页面时传递参数并且在新页面接收参数
    bootstrap table 合并列(只合并相邻的相同项)
    谷歌浏览器输入框清除历史输入记录
    js高德地图支持,java获取高德地图两点间的距离
    ASP.NET Excel 文件导入与导出实例
    Struts2入门---输入验证---验证身份证案例
    Struts2入门---国际化
    Struts2入门---消息处理和类型转换
    Struts2入门---增删改查- 拦截器栈的应用
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/5906090.html
Copyright © 2020-2023  润新知