(CMake) 库的操作

文章目录

  • 预备
    • 目录结构
    • Code
  • CMakeLists.txt
    • root
    • subdir
  • END

预备

目录结构

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

Code

main.cpp

#include 

#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 

#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 

#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

你可能感兴趣的:(C/C++,c++,算法,开发语言)