zoukankan      html  css  js  c++  java
  • 1. CMake 系列

    1. 文件目录结构

    首先创建如下目录结构

    └── lib
        ├── build # 
        ├── CMakeLists.txt
        └── src # 
            ├── add.c
            └── add.h
    
    

    从上面的结构,可以看出博主想实现一个具备简单加法的库。

    build:存放cmake生成的makefile文件,make编译生成的中间文件。

    CMakeLists.txt:使用cmake语法编写相关指令,用于生成makefile

    src:库文件的源代码

    2. 库文件源代码

    add.h

    #ifndef _ADD_H
    #define _ADD_H
    
    int add(const int a, const int b);
    
    #endif
    

    add.c

    #include "add.h"
    
    int add(const int a, const int b)
    {
        return a+b;
    }
    
    

    3. 编译生成库文件

    CMakeLists.txt

    # 指定cmake最小版本
    cmake_minimum_required(VERSION 2.6) 
    
    project(add)
    
    message("Project Name: " ${PROJECT_NAME})
    
    #设置编译参数
    set(CMAKE_C_FLAGS "-g -Wall")
    
    #设置库文件文件输出目录
    set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
    
    
    #递归获取目录下所有的C文件
    file(GLOB_RECURSE c_files ${PROJECT_SOURCE_DIR}/src/*.c)
    
    #生成动态库和静态库
    add_library(add_lib_shared  SHARED ${c_files})
    add_library(add_lib_static STATIC ${c_files})
    
    #将动态库和静态库的名字设置为 add
    set_target_properties(add_lib_shared PROPERTIES OUTPUT_NAME "add")
    set_target_properties(add_lib_static PROPERTIES OUTPUT_NAME "add")
    
    #设置动态库版本
    set_target_properties(add_lib_shared PROPERTIES VERSION 1.0 SOVERSION 1)
    

    编译

    $ cd build
    $ cmake ..
    $ make
    $ cd ..
    $ tree lib
    

    效果如下

    lib
    ├── libadd.a
    ├── libadd.so -> libadd.so.1
    ├── libadd.so.1 -> libadd.so.1.0
    └── libadd.so.1.0
    
    
  • 相关阅读:
    [翻译]Kafka Streams简介: 让流处理变得更简单
    KafkaClient接口与Kafka处理请求的若干特性
    KIP-32 Add timestamps to Kafka message
    (翻译)Google Guava Cache
    Kerberos的组件和术语(翻译和注解)
    目录
    java map 分析
    编译原理
    Java中的SPI(Service Provider Interface)
    新型数据库Kudu应用经验分享
  • 原文地址:https://www.cnblogs.com/standardzero/p/10781227.html
Copyright © 2011-2022 走看看