(CMake) 库的操作

预备

目录结构

root:.
│  CMakeLists.txt
│  main.cpp
│  
├─include
│      head.h
│
└─subdir
        add.cpp
        CMakeLists.txt

Code

main.cpp

#include <iostream>

#include "head.h"

int main() {
    LOG();

    int x = 1;
    int y = 2;
    printf("%d + %d = %d\n", x, y, add(x, y));
}

head.h

辅助验证cmake的配置

#ifndef HEAD
#define HEAD

#include <iostream>

#define LOG()                                                          \
    printf("File[%s]\nTime[%s] cpp[%d] Fun[%s]\n", __FILE__, __TIME__, \
           __cplusplus, __func__);

extern int add(int, int);

#endif

add.cpp

#include <iostream>

#include "head.h"

int add(int x, int y) {
    LOG();
    return x + y;
}

CMakeLists.txt

在cmake中,动静态库的制作主要配置同一个位置的参数即可。

root

说明:

  • 注意add_executable要写在库操作的上面
  • add_subdirectory会自动检测子目录中的CMakeLists.txt
  • target_link_libraries
    • 如果是当前工程中生成的,则可以写简称
    • 如果是外部的,则写全称
cmake_minimum_required(VERSION 3.15)

project(mydemo)

set(CMAKE_CXX_STANDARD 17)
set(MY_APP_NAME app)

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)

add_executable(
    ${MY_APP_NAME}
    main.cpp
)

# 指定头文件搜索目录
target_include_directories(${MY_APP_NAME} 
    PUBLIC
    ${PROJECT_SOURCE_DIR}/include
)

# 添加子目录
# - 在这个子目录中用来生成库
add_subdirectory(subdir)

# 链接生成的库
# - 当前项目生成的简写
# - 外部库写全称
target_link_libraries(${MY_APP_NAME} 
    PUBLIC 
    add
    # ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/libadd.dll
)

subdir

说明:

  • 注意:这cmake是整个project的一个子cmake
  • 每个CMakeLists.txt都可以做自己的配置,如设定与root的cmake不同的版本号
  • 动静态库的参数
    • 静态库 STATIC
    • 动态库 SHARED
set(CMAKE_CXX_STANDARD 20)

set(MY_LIB_NAME add)

# 库名 动/静 原文件
add_library(${MY_LIB_NAME} 
    # STATIC
    SHARED
    add.cpp
)

# 给目标设定头文件
target_include_directories(${MY_LIB_NAME}
    PUBLIC
    ${PROJECT_SOURCE_DIR}/include
)

END

相关链接

(CMake) 指定生成器 generator_cmake generator-CSDN博客

(CMake) 库的生成和链接_cmake生成静态库链接静态库-CSDN博客

效果

mkdir build
cd build
cmake ..
cmake --build .
cd ../bin 
app.exe
File[E:\cpp-demo\compilation\CMake\make-lib\main.cpp]
Time[23:46:02] cpp[201703] Fun[main]
File[E:\cpp-demo\compilation\CMake\make-lib\subdir\add.cpp]
Time[23:46:01] cpp[202002] Fun[add]
1 + 2 = 3
root:.
│  CMakeLists.txt
│  main.cpp
│  
├─bin
│      app.exe
│      libadd.dll
│      
├─build
\.......
│
├─include
│      head.h
│
├─lib
│      libadd.dll.a
│
└─subdir
        add.cpp
        CMakeLists.txt
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值